You can store an EventCollection(modelled using PriorityQueue) in a TreeMap (replacement for main PriorityQueue) instead of events.
The EventCollection will have events corresponding to the same entity.
The compare function of an EventCollection will be the compare function of the event you are already using. The events which you will use for compare will be the largest priority events in the collections you want to compare.
If you want to get highest pri event, you get the largest element in the TreeMap (I believe it supports that) and get the max event from there.
Update the collection (by removing that event) and then delete that collection entry from the TreeMap and reinsert into the TreeMap. I believe the TreeMap gives you the new position in the tree.
Now update an (entity->position in tree map) hashtable entry corresponding to that entity.
Anytime a new event comes in, check the (entity-position in tree map) hashtable and insert that event into the corresponding EventCollection and again update the collection (delete/insert) in the treemap and then update the hashtable with the new position.
If you want to delete all events of a particular entity, all you need to do is find the corresponding EventCollection and delete it from the TreeMap and the hashtable.
Since you can use a PriorityQueue to model the EventCollection class, you won't have to throw away your existing code.
Hope it works for you.