Znalazłem to! Wywoływałem GetCollection() z innej metody generycznej, takiej jak ta:
public T Save<T>(T item) where T : class, IRepoData, new()
{
GetCollection<T>().Save(item);
}
To spowodowało, że GetCollection widział T jako interfejs zamiast rzeczywistej klasy instancji. GetCollection działa dobrze w każdym innym miejscu.
Dla każdego, kto ma ten problem, po prostu użyłem zapytania niskiego poziomu, takiego jak to... Collection.FindOneAs<T>(Query.EQ("Id", itemID.ToString()));