Validate first. If you have a cycle of errors, this reduce the number of dialogs by a large amount.
Consider save then validate, with 3 rounds of errors:
Save confirm --> Validate (fails), Save confirm --> Validate (fails), Save confirm --> Validate (fails) --> Save (passes).
That's 7 dialogs. Now with validate:
Validate (fails) --> Validate (fails) --> Validate (fails) --> Save (passes).
That's 4 dialogs.
Try to optimise your validation routine! Also is save a dangerous operation? Do you really need a save confirm? You could have a history mechanism instead (a bit like SO) and eliminate the save dialog completely.
Another option is allow the user to save invalid data, which may or may not be workable depending on your solution.
If you are worried about ruining your DB design by saving invalid data (some people do this by allowing columns to be nullable, when they shouldn't be), you can always persist the state temporarily to a BLOB.