Move validations higher in save function

Move the validation code to happen before the save funtion checks for enums being out of range.  This way the enum validators can catch the error and raise the event instead of throwing an error that breaks execution.