In some cases a "parent" entity which contains a Set of child entities will not allow you to remove chile entities from the collection, even if it exists in the collection.
If you call contains on the collection and it returns true, then remove should transitively also return true. If the object is in the collection, then it should be removable.
In looking at the SDN code, the wrapper collection just passes the remove call to the delegate collection, and it appears that that is returning the false. So in essence, it looks like the JDK collection is the one broken. However, because we have proxies and some other wrappers around our objects, it might be putting in a wrapped object into the collection for the entity.