The only place where you can do that type of validation, is in the aggregate itself. The aggregates (in the command model) aren't allowed to expose their state, so there isn't any other place you can do it. The state maintained by the aggregate (which is initialized using events, when using event sourcing), should be sufficient to do this validation.
I don't think anyone changes the read model state without an event being applied. Events are applied in the command model, and then published to the read model updaters. They pick up those events and change the model accordingly.
Cheers,
Allard