Jason, Im not suggesting that you do your validation with the interceptor.
My suggestion is this.
Have an interface that has a property such as HasBeenValidated or it could even be IsValid but IsValid would not be true unless a developer has actually called Validate. so lets go with HasBeenValidated to be more clear.
Code:
IValidationVerifiable{
bool HasBeenValidated{get;}
}
Now the interceptor looks for types that implement IValidationVerifiable. If it finds an IValidationVerifiable it checks HasBeenValidated. If the entity has not been validated then it will throw an exception. This prevents developers from being able to persist an entity that hasnt been validated.
The catch here is that you have to make sure that your entity will set HasBeenValidated back to false if it changes a field that requires validation. Thats not to much of a burden though. Or you could just add a property setter to IValidationVerifiable that you could use to have the interceptor mark the entity as requiring validation again after it has been persisted.
How does that sound? Is that a good soluton to your problem of wild devs?