Creo que ayer no leí con suficiente detenimiento tu mensaje, era tarde para mi. Ahora que lo leo con más tranquilidad no acabo de entenderlo.
En el modelo validas el select para que no pueda recibir un valor vacío, y eso es lo hace. Te obliga a que en el select escogas una opción.
Para ver información del error puedes incluir tras el select esto:
Código PHP:
echo $form->error('User.state');
Te mostrará información del error que se produce, si es que se produce.
Mírate en el manual la sección de validación:
http://book.cakephp.org/view/125/Data-Validation. Usar VALID_NOT_EMPTY está bien, pero puede ser mucho más avanzado.