Hittade det! Jag anropade GetCollection() från en annan generisk metod, så här:
public T Save<T>(T item) where T : class, IRepoData, new()
{
GetCollection<T>().Save(item);
}
Detta gjorde att GetCollection såg T som gränssnittet istället för den faktiska instansklassen. GetCollection fungerar bra överallt.
För alla andra med det här problemet använde jag bara en lågnivåfråga som denna istället... Collection.FindOneAs<T>(Query.EQ("Id", itemID.ToString()));