That makes sense.  I hadn't considered that use case.  I suppose that's what the foreach loop I removed was attempting to do.  I don't believe that the current IContentReader.Load method will work for this though.  If T inherits U, then when we try to load an object of type T with the IContentReader for type U.  The IContentReader will create an object of type U, and return it.  Then the ContentManager will attempt to cast to T (which will fail).  In order for this case to work we need to reveal the true type we expect to IContentReader.Load so that it can create the correct type.

I also don't like the idea of attempting to load the type with each reader, unless we expect a certain exception type to be thrown when they fail.  Expecting them to return null seems like a poor decision for the IContentReader interface to me.  That's what was set up before.  A better way would be setting up a static check, or adding a signature like bool IContentReader.CanLoad<T>() to the IContentReader interface.