Apparently, the is used to track the changes in the dataset. But this causes a conflict with your code, because the framework is trying to sort the dataset even after the user removed a record. This is obviously not going to work. I am not very familiar with the automatic handling of the dataset this way, so I can't really help you much more.
Perhaps the best way is if you could somehow detect that the row has been deleted and skip processing in the Compare() method.
Don't worry about the points. I really only want to help, so if we can't arrive at a solution just have the question closed.
-dZ.