Thanks for looking. I am calling the ToList extension method... at least that's what code shows. I've also a mock of ToCursor result, but it comes back null. I'm sure it's partly me not know what this instance should look like in the system.
As another note, I've pulled the source code and run the tests, but many of them fail; making it hard to compare.
Fincally, I tried using MongoCollection's Find and Aggregate methods to get to calling ToList().
[TestClass]
  public class MongoDataAccessTests
  {
    private MongoCollectionSettings collectionSettings;
    private MongoClientSettings clientSettings;
    private MongoDatabaseSettings databaseSettings;
    private string connection;
    private Mock<IAsyncCursor<PlanDay>> asyncCursor;
    private Mock<IMongoQueryable<PlanDay>> mongoQueryable;
    [TestInitialize]
    public void Setup()
    {
      connection = Guid.NewGuid().ToString();
      collectionSettings = new MongoCollectionSettings
      {
        GuidRepresentation = GuidRepresentation.Standard,
        ReadEncoding = new UTF8Encoding(),
        ReadConcern = ReadConcern.Default,
        ReadPreference = new ReadPreference(ReadPreferenceMode.Nearest, new List<TagSet>()),
        WriteConcern = new WriteConcern(),
        WriteEncoding = new UTF8Encoding()
      };
      clientSettings = new MongoClientSettings
      {
        ReadPreference = collectionSettings.ReadPreference,
        GuidRepresentation = collectionSettings.GuidRepresentation,
        ReadConcern = collectionSettings.ReadConcern,
        ReadEncoding = collectionSettings.ReadEncoding,
        WriteConcern = collectionSettings.WriteConcern,
        WriteEncoding = collectionSettings.WriteEncoding
      };
      databaseSettings = new MongoDatabaseSettings
      {
        ReadPreference = collectionSettings.ReadPreference,
        GuidRepresentation = collectionSettings.GuidRepresentation,
        ReadConcern = collectionSettings.ReadConcern,
        ReadEncoding = collectionSettings.ReadEncoding,
        WriteConcern = collectionSettings.WriteConcern,
        WriteEncoding = collectionSettings.WriteEncoding
      };
      // I wish there was a better understanding of this area in code.
      asyncCursor = new Mock<IAsyncCursor<PlanDay>>();
      asyncCursor.Setup(x => x.MoveNext(It.IsAny<CancellationToken>())).Returns(false); // i've tried true as well
      asyncCursor.Setup(x => x.MoveNextAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(false)); // i've tried true as well
      asyncCursor.SetupGet(x => x.Current).Returns(new List<PlanDay>());
      asyncCursor.SetupAllProperties();
      mongoQueryable = new Mock<IMongoQueryable<PlanDay>>();
      mongoQueryable.Setup(x => x.ToCursor(It.IsAny<CancellationToken>())).Returns(asyncCursor.Object);
      mongoQueryable.Setup(x => x.ToCursorAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(asyncCursor.Object));
      mongoQueryable.Setup(x => x.GetExecutionModel()).Returns(It.IsAny<QueryableExecutionModel>());
      var queryProvider = new Mock<IQueryProvider>();Â
      queryProvider.Setup(x => x.Execute(It.IsAny<Expression>()));
      mongoQueryable.SetupGet(x => x.Provider).Returns(queryProvider.Object);
    }
    Â
    [TestMethod]
    public void WhereShouldReturnCollectionWhenDatabaseSupplied()
    {
      var access = new MongoDataAccess(
        connection,
        Guid.NewGuid().ToString(),
        new Mock<IBsonSerializer>().Object);
      Â
      var mongoDatabase = CreateMockDatabase(clientSettings, databaseSettings, connection);
      var mongoCollection = CreateMockCollection<PlanDay>(mongoDatabase.Object, collectionSettings).Object;
      Â
      mongoDatabase.Setup(x => x.GetCollection<PlanDay>(It.IsAny<string>(), It.IsAny<MongoCollectionSettings>()))
             .Returns(mongoCollection);
      var result = access.Where<PlanDay>(mongoDatabase.Object, x => x.ForecastDate.Year >= 2014);
      Assert.AreEqual(result.Count, 1);
    }
    private static Mock<IMongoDatabase> CreateMockDatabase(MongoClientSettings clientSettings, MongoDatabaseSettings databaseSettings, string connection)
    {
      var mongoDatabase = new Mock<IMongoDatabase>();
      var client = new Mock<IMongoClient>();
      client.SetupGet(x => x.Settings).Returns(clientSettings);
      client.SetupAllProperties();
      mongoDatabase.SetupGet(x => x.Client).Returns(client.Object);
      mongoDatabase.Setup(x => x.Settings).Returns(databaseSettings);
      mongoDatabase.Setup(x => x.DatabaseNamespace).Returns(new DatabaseNamespace(connection));
      return mongoDatabase;
    }
    private static Mock<IMongoCollection<T>> CreateMockCollection<T>(IMongoDatabase database, MongoCollectionSettings mongoCollectionSettings) where T : new()
    {
      var serializer = new Mock<IBsonSerializer<T>>();
      serializer.Setup(x => x.Deserialize(It.IsAny<BsonDeserializationContext>(), It.IsAny<BsonDeserializationArgs>())).Returns(new T());
      serializer.Setup(x => x.Serialize(It.IsAny<BsonSerializationContext>(), It.IsAny<BsonSerializationArgs>(), It.IsAny<object>()));
      serializer.Setup(x => x.ValueType).Returns(typeof(T));
      Â
      var collectionMock = new Mock<IMongoCollection<T>>();
      collectionMock.Setup(x => x.Database).Returns(database);
      collectionMock.Setup(x => x.DocumentSerializer).Returns(serializer.Object);
      collectionMock.Setup(x => x.CollectionNamespace).Returns(new CollectionNamespace(database.DatabaseNamespace, typeof(T).Name));
      collectionMock.Setup(x => x.Settings).Returns(mongoCollectionSettings);
      return collectionMock;
    }
  }
public class MongoDataAccess : IMongoDataAccess
  {
    private readonly string _connection;
    private readonly string _instanceName;
    private readonly IBsonSerializer _serializer;
    /// <exception cref="ArgumentException"><paramref name="connection"/> is <see cref="string.IsNullOrEmpty"/>.</exception>
    /// <exception cref="ArgumentException"><paramref name="instanceName"/> is <see cref="string.IsNullOrEmpty"/>.</exception>
    /// <exception cref="ArgumentNullException"><paramref name="serializer"/> is <see langword="null" />.</exception>
    public MongoDataAccess(string connection, string instanceName, IBsonSerializer serializer)
    {
      if (string.IsNullOrEmpty(connection))
      {
        throw new ArgumentException("connection is null or empty.", "connection");
      }
      if (string.IsNullOrEmpty(instanceName))
      {
        throw new ArgumentException("instanceName is null or empty.", "instanceName");
      }
      if (serializer == null)
      {
        throw new ArgumentNullException("serializer");
      }
      _connection = connection;
      _instanceName = instanceName;
      _serializer = serializer;
    }
    public IMongoDatabase GetMongoDatabase()
    {
      var mc = new MongoClient();
      return mc.GetDatabase(_connection);
    }
    public IBsonSerializer Serializer
    {
      get
      {
        return _serializer;
      }
    }
    public IList<T> Where<T>(Expression<Func<T, bool>> predicate = null)
    {
      return Where(GetMongoDatabase(), predicate);
    }
    public IList<T> Where<T>(IMongoDatabase mongoDatabase, Expression<Func<T, bool>> predicate = null)
    {
      var mongoCollection = mongoDatabase.GetCollection<T>(typeof(T).Name);
      if (mongoCollection == null)
      {
        throw new Exception("mongoCollection is null");
      }
      if (predicate == null)
      {
// throws error in test
        var aggregateFluent = mongoCollection.Aggregate();
        return aggregateFluent.ToList();
      }
      var mongoQueryable = mongoCollection.Find(predicate);
   // throws same error in another test
      return mongoQueryable.ToList();
    }
  }
public static IFindFluent<TDocument, TDocument> Find<TDocument>(this IMongoCollection<TDocument> collection, FilterDefinition<TDocument> filter, FindOptions options = null)
  {
   FindOptions<TDocument, TDocument> options1;
   if (options == null)
   {
    options1 = (FindOptions<TDocument, TDocument>) new FindOptions<TDocument>();
   }
   else
   {
    FindOptions<TDocument> findOptions = new FindOptions<TDocument>();
    bool? allowPartialResults = options.AllowPartialResults;
    findOptions.AllowPartialResults = allowPartialResults;
    int? batchSize = options.BatchSize;
    findOptions.BatchSize = batchSize;
    string comment = options.Comment;
    findOptions.Comment = comment;
    int num = (int) options.CursorType;
    findOptions.CursorType = (CursorType) num;
    TimeSpan? maxAwaitTime = options.MaxAwaitTime;
    findOptions.MaxAwaitTime = maxAwaitTime;
    TimeSpan? maxTime = options.MaxTime;
    findOptions.MaxTime = maxTime;
    BsonDocument modifiers = options.Modifiers;
    findOptions.Modifiers = modifiers;
    bool? noCursorTimeout = options.NoCursorTimeout;
    findOptions.NoCursorTimeout = noCursorTimeout;
    bool? oplogReplay = options.OplogReplay;
    findOptions.OplogReplay = oplogReplay;
    options1 = (FindOptions<TDocument, TDocument>) findOptions;
   }
   return (IFindFluent<TDocument, TDocument>) new FindFluent<TDocument, TDocument>(collection, filter, options1);
  }
FindFluent`2.cs
public FindFluent(IMongoCollection<TDocument> collection, FilterDefinition<TDocument> filter, FindOptions<TDocument, TProjection> options)
  {
   this._collection = Ensure.IsNotNull<IMongoCollection<TDocument>>(collection, "collection");
   this._filter = Ensure.IsNotNull<FilterDefinition<TDocument>>(filter, "filter");
   this._options = Ensure.IsNotNull<FindOptions<TDocument, TProjection>>(options, "options");
  }
IAsyncCursorSourceExtensions.cs