У Django-форм есть методы clean_"fieldname", которые проверяют корректность отдельных полей. Метод clean проверяет как эти поля друг с другом сочитаются, поэтому ошибки из него и формируются как non_field_errors (т.е. сами значения корректные - февраль, 31 число - но вместе не сочитаются).
Можно попробовать бросить ValidationError в методе clean_amount.