I was wondering, why you doesn't the BeforeRemove event of the the EntityCollectionBase2 take a (CancelEventArgs) parameter instead of (EventArgs) specially that this is as per the Ms-Guidelines for Framework design??
Reading through the (Framework Design Guidelines) book, they recommend that in such a case its just a no-op and that the AfterEvent should NOT fire also (so if we cancel the BeforeRemove the item is NOT removed from the list and hence the listChanged event would NOT fire..)