I discovered that the cause of my problems (see question) was the lack of support in C# for covariance on inherited methods' return types. Now I'm curious what languages support this feature. Accepted answer will be whoever can name the most.
EDIT: John Millikin correctly pointed out that lots of dynamic languages support this. I'll have to clarify that I'm looking for static/strongly typed languages.