You're right, but the question is: will you break existing code if you apply this change?
Let's assume that someone writes crappy code, and that in the database there is a column varchar(10) and it allows any value, then the developer wants to get the boolean of that, and in that column there are those values:
t,
TRUE,
FULSE,
yes, ok,
si,
NO, maybe
So, what if someone thinks that "ok" will return TRUE, if the conversion is allowed this will return FALSE, and you will get a wrong behaviour.
If for instance the database have only valid values, YES, NO, TRUE, FALSE, 1, 0 ON, OFF, then this won't break anything. It will break only when someone is doing something bad, so essentially most good code will work without changing a single line of code.
I think is far more dangerous to blindly accept any value and cast it to false, that to reject it early.