I don't know much about xval, but maybe you can look into inheriting from xval attributes and doing the check there...
e.g. ConditionalRequiredAttribute : RequiredAttribute, which maybe can take the appropriate statuses to validate on.
Validation would be as simple as base.Validate() (or whatever it's called) on ConditionalRequiredAttribute's validate method if a validation condition is met (status != "Draft).
Since I don't know xval, I'm not sure how the client side validation works... does it create client side validation code? In this case, you'd have to write code that creates a similar wrapper in javascript (e.g. if(status != "Draft")... If validation simply makes an Ajax call to the server that returns a list of errors, then I imagine that you wouldn't have to do anything else.
Sorry I couldn't answer your question directly, but maybe this can help you come up with some ideas...