Currently ObjectId.TryParse(string s, out ObjectId o) checks for null value and throws an exception if it's null. That is not how TryParse is implemented elsewhere - it should simply initialize o = ObjectId.Empty and return false - the whole idea of using TryParse is that it doesn't throw exceptions.
Can you please fix that?