The validation rules run if:
1) It is a related rule, OR
2) There is no stored value (ie: new, unsaved object), OR
3) The current value does not match the stored value
If it is a related rule, then it runs always, because it isn't possible to check against a stored value (currently).
Otherwise, as long as you get() before you save(), OR you don't get() but don't set the field, the validation rule is not run.
I don't know what else to tell you. Try setting up your code outside the current setup, with hard-coded columns and values, and see if you get the issue.
(Man, I hope all that user-submitted data is being checked thoroughly!)