Você pode usar o tipo string .NET em vez de ObjectId, você só precisa decorá-lo com BsonRepresentation. Se você usar BsonDateTime, terá o mesmo problema de conversão. Esta é uma classe de domínio no meu projeto que usa esses decoradores.
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; }
}