I suspect that RUNTIME_INFO_UPGRADE_VERSION will actually use the newest non-4.0 version when it doesn't find an exact match, which is why I asked you to add that test. I'm not sure whether Marvin's results prove that or not.
If that's the case, get_runtime_info should probably be checking the result of CLRMetaHost_GetRuntime, and proceeding to the RUNTIME_INFO_UPGRADE_VERSION check if it fails.