I'm using \lithium\data\source\MongoDB::update() to do an upsert in safe mode. On some updates, there is an expected MongoCursorException due to a duplicate key being passed. The try/catch below does not catch the error, and it bubbles back up to an ErrorHandler I have attached to Dispatcher::run().
try {
$result = Items::update($record, $conditions, array('upsert' => true, 'safe' => true));
} catch (MongoCursorException $e) {
$result = false;
} catch (Exception $e) {
$result = false;
}