[eluser]Unknown[/eluser]
So, the problem is how set_value works when validation is also being used (as many have pointed out).
From the validation rules section in the documentation ...
"Note: You can also use (as a rule) any native PHP functions that permit one parameter."
So, for any form variables not needing validation, use something that will always be true, like isset and set_value will return the $_POST variable, as desired
$this->form_validation->set_rules('field', '', 'isset')
It's extra code in the controller, but this will allow set_value() to behave as expected when you are using validation ... and it will probably keep working through an upgrade if they don't get around to fixing.
It could be easier, no doubt (and I suspect others have posted the same/similar work-around).