No, the coalesce function requires all inputs to be of the same datatype as they are arguments to the function.
Implicit datatype conversion typically happens when things are compared with operators (as you are doing in example 1 and 2.
There's not many functions/procedures of that nature that will take mixed datatypes and convert them for you.
So, it's nothing to do with the CASE statements, it's to do with the COALESCE function. It's overloaded for particular datatypes, but it does require all the arguments to be of the same datatype.