Puoi usare il tipo di stringa .NET invece di ObjectId, devi solo decorarlo con BsonRepresentation. Se usi BsonDateTime, avrai lo stesso problema di conversione. Questa è una classe di dominio nel mio progetto che usa quei decoratori.
public class DocumentMetadata
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Name { get; set; }
public string FullName { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Utc)]
public DateTime DownloadTime { get; set; }
}