Deserialization from BSON includes a helpful comment:
Make sure you include the field "__pclass" to the projection if you want the ODM to automatically call the bsonUnserialize of the class.
If you don't get that field in the query, the ODM will never know which class to call, so you'll have to specify it with the "typemap" variable.
We should note this in the documentation and perhaps add a note to the projection option docs in Query::__construct().