Намерих го! Извиквах GetCollection() от друг общ метод, като този:
public T Save<T>(T item) where T : class, IRepoData, new()
{
GetCollection<T>().Save(item);
}
Това накара GetCollection да види T като интерфейс вместо действителния клас на екземпляра. GetCollection работи добре навсякъде другаде.
За всеки друг с този проблем, вместо това използвах заявка от ниско ниво като тази... Collection.FindOneAs<T>(Query.EQ("Id", itemID.ToString()));