The problem is not in the code you provided.
There is a delicate balance of server and client validation that takes place on the page. It is kind of tricky to add to it if you don't understand exactly how it works, so I'll try to describe.
1) I see there is an issue with your spry validation. Normally you wouldn't be able to submit at all with the spry errors on the page. You can submit and that brings the server errors into play. Normally with spry server validaiton is only used if someone turns javascript off.
Most likely if you fixed that, these other problems would never occur... but I'll explain more for giggles.
Spry creates a span around your form field and creates specifically named span tags intside it for the error message. Spry will only show one error per field and the code and sytax is entirely determined by the spry library.
Server Validation is used to validate CAPTCHA and obvious question fields as well as adding further honeypot validation for bots. Technically speaking the "double up" you refer to could only potentially happen on those two fields.
Server validation has more flexability. It defines the validation rules in the code you provide above. The last argument, numbered 1 to 13 in your case becomes the reference for that particular error. You can then hide or show anything you want on your page based on the success or failure of these validations.
Now, if you fail server validation and an error message is shown, then there is code added onBlur that actually removes that server validation before the Spry validation is shown. This is the step you are probably missing that is causing the repeated fields. The repeats aren't actually from spry or from server validations... they are both showing at once... at least that is how it appears to me.