[eluser]summery[/eluser]
I started mucking around in the CI Core and I've found the problem.
In libraries/Form_validation.php, the first thing the run() function does is check if validation rules are set in the _field_data array. If they are set, it simply checks the form against those rules, paying ZERO attention to its argument, which is (in this case) a new and different set of rules to apply. Annoying.
There are two approaches to fixing it, and both involve overriding form validation's run() function in the CI core.
1) Mess with the beginning of the function, so the validator pays attention to its argument first, its internal state and default configuration rules second.
2) Empty the _field_data array when validation passes.
I think I'm going with #2.
Fingers crossed!! :-)