form_set_error() redirects to raw ajax response page
The API page for form_set_error() says (emphasis added):


  When a validation error is detected, the validator calls form_set_error() to indicate which element needs to be changed and provide an error message. This causes the Form API to not execute the form submit handlers, and instead to re-display the form to the user with the corresponding elements rendered with an 'error' CSS class (shown as red by default).


I reckon that's probably where your problem lies.  Further down the same page is this:


  Multistep forms not wanting to validate the whole form can set #limit_validation_errors on buttons to limit validation errors to only certain elements.


This looks like it might help.