Thanks, jmcilhinney. Your response further confirms and clarifies what has been observed here.
Easier to understand is the behavior of the If function ("two potential return values must be the same type ...").
The CType situation is, as you say, more idiosyncratic: "it appears that the result of using CType to convert a null String reference to a nullable numeric type is always zero". Prior to posting on here, I did try to find an "official statement" on this behavior but was unable to do so.