Please note that the second parameter should be a microseconds value, not a miliseconds one, as stated in the documentation.
I am using the code below to show you what I mean:
<?php
    $example = new \DateTime('2013-09-22T10:41:44.451999');
    $seconds = $example->getTimestamp();
    $miliseconds = floor($example->format('u') / 1000);
    $microseconds = $example->format('u');
    $fullToString = $example->format('Y-m-d\TH:i:s.uP');
    $collection->insert(array(
        'timeMicroseconds' => new \MongoDate($seconds, $microseconds),
        'toString' => $fullToString,
    ));
    $collection->insert(array(
        'timeMiliseconds' => new \MongoDate($seconds, $miliseconds),
        'toString' => $fullToString,
    ));
?>
Let's take a look in the database to see what is really stored:
{
    "_id" : ObjectId("523f07cfc2b581eb7f069b1d"),
    "timeMicroseconds" : ISODate("2013-09-22T07:41:44.451Z"),
    "toString" : "2013-09-22T10:41:44.451999+03:00"
}
{
    "_id" : ObjectId("523f07cfc2b581eb7f069b1e"),
    "timeMiliseconds" : ISODate("2013-09-22T07:41:44.000Z"),
    "toString" : "2013-09-22T10:41:44.451999+03:00"
}