Here's a summary of what happened and how to avoid it:
The code that was failing was using FindAndRemove and attempting to
deserialize the modified (removed) document. The return value of
FindAndRemove is of type FindAndModifyResult, which in turn is a
subclass of CommandResult;
In the v1.0 driver CommandResult is no longer a subclass of
BsonDocument. Instead it has a property called Response of type
BsonDocument that contains the raw response from the server, and it
contains two elements: "value" and "ok". If you try to deserialize the
Response property into a C# class you get an exception because the
"value" element has no corresponding property in the C# class.
The ModifiedDocument property has the actual modified document itself
(the value of the "value" element). So it's the ModifiedDocument that
should be deserialized and not the Response.
There is also a method called GetModifiedDocumentAs<T> that will do
the deserialization for you.