We should clarify that even single-threaded generation of ObjectIds will sometimes be non-monotonic.
The ObjectId definition says that the 3-byte counter starts at a random value (and implicitly is incremented with each generated ObjectId). The current behaviour (in the server/shell at least) is to roll back to 0 after reaching 0xffffff. Unfortunately, when this happens any further ObjectIds generated by that thread during the same second will have a lower sort order (compared to the previously-generated ObjectIds during that second) — that is, single-threaded ObjectId generation is not always monotonic.