Что-то не так со стандартным удалением?
public void RemovePlayer(Avatar theAvatar) {
AvatarEntersRoom -= new EventHandler<EnterRoomEventArgs>(theAvatar.HandleAvatarEntersRoom);
}
EDIT
На основании вашего обновления выясняется, что вам нужен код, который удалит определенный объект из всех событий определенного класса. Нет реалистичного способа достичь этой цели. Это часто немного многословно, но лучший способ состоит в том, чтобы индивидуально добавлять / удалять конкретный объектный метод из каждого события.
Единственный способ приблизить к этой функциональности - это использовать отражение. Вы можете рефлексивно захватить все события в вашем классе, а затем совершить магию, чтобы найти все экземпляры класса в цепочке событий. Это будет только частичное решение, потому что оно будет игнорировать такие вещи, как обработчики событий лямбда-выражения.