remove() removes documents from a collection. The comment is an embedded document, not a document that is a member of the entries collection. Think of it this way: you are not removing a comment document, you are altering the entry document so that it no longer contains the specific comment embedded document. There's often confusion about documents as members of a collection versus embedded documents. They are entirely different and you can't use find(), update(), remove(), etc to interact with embedded documents except insofar as you are actually interacting with the parent document.
To remove the comment, do the following in the mongo shell (I won't try PHP since I'm not familiar with it even though it looks easy to translate)
db.entries.update({ "_id" : "design-patterns-vs-frameworks" }, { "$pull" : { "comments" : { "_id" : ObjectId("5405ca0eaf105b52133c9869") } } })
Notice we use update() and match the parent doc's _id, and update with an operation to pull the comment from the comments array. We're interacting with the parent entry document, not directly with the comment subdocument.
-Will