Trovato! Stavo chiamando GetCollection() dall'interno di un altro metodo generico, come questo:
public T Save<T>(T item) where T : class, IRepoData, new()
{
GetCollection<T>().Save(item);
}
Ciò ha fatto sì che GetCollection vedesse T come interfaccia anziché come classe di istanza effettiva. GetCollection funziona bene altrove.
Per chiunque altro abbia questo problema, ho usato invece una query di basso livello come questa... Collection.FindOneAs<T>(Query.EQ("Id", itemID.ToString()));