E ovviamente trovo la risposta subito dopo aver postato la domanda. Da questa risposta, la soluzione è aggiungere un [BsonIgnoreIfDefault]
attributo all'ID. Nell'esempio della domanda sarebbe:
public class MongoObject
{
[BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnoreIfDefault] // <--- this is what was missing
public string MongoID { get; set; }
public int Index { get; set; }
}