Где лучше проверять входные данные, в контроллере или в модели?
Данные надо проверять там, где они есть (гуглить "GRASP информационный эксперт").
В вашем случае мы говорим о "входящих данных". В контексте вопроса стало быть мы говорим о контроллере. Для модели данные тоже будут "входящими" но это уже будут данные в формате модели (например вместо строки готовый DateTime объект и т.д.)
Модель же не должна входить в "невалидное состояние" за счет бизнес правил и т.д (банально не должно быть возможности вызвать какой-то метод и сломать целостность состояния модели). А стало быть валидировать ее нет смысла.
с данными работает модель, и только модель...
по хорошему, валидировать их в setter'е в момент присвоения.