Basically we had to start with the fresh page every time on the server side before processing the flow action submission. This way we will be able to distinguish the new errors (if any) happened during the post processing time. Without this there is no way to differentiate between the error messages set during previous submission.
Ideally server side validations has to be done once during the submission through a validation rule in the Flow action rule form (for all the input fields).
we are also facing similar issue , we have done all validations on click of a checkbox and displayed error messages on screen , but once we submit , as specified in above posts in step 4 of finishassignment it is clearing all the error messages , To display error messages again we have to do the same validations again in validate rule , which is duplicate.
You can create a private checkout of the RUF determineDeferErrors; this is the RUF which is returning false when you want it to return true.
Open the XML for the RUF and find the pzInsKey. Then find and run the rule pzPrivateCheckout, supplying the pzInsKey of determineDeferErrors. Once you get the private checkout, compile the RUF but do not return it to the Library, and do not rebuild the Library.
Now you can add oLog.infoForce statements throughout the RUF, and through those you can determine exactly why the code is returning false instead of true. (You will need to recompile the RUF after every change.)