I got around the same problem (bad February dates in char fields) by validating as a string.
For example, when the date is in YYYYMMDD format e.g. ("20000231"):
If substring(@date, 5, 2) = "02" and convert(int, substring(@date, 7, 2)) > 29
print "error"...