События на самом деле просто делегаты. Из того, что я помню, они были сделаны намного быстрее в 2.0 CLR. Я удивлен, что замена событий интерфейсом сделала ваш код значительно быстрее - по моему опыту, они довольно быстрые, и если вы имеете дело с XML, я бы не ожидал, что вызовы событий станут узким местом. *
Ваш код постоянно подписывался на события и отписывался от них? Есть ли у вас какие-либо данные о количестве вызовов событий, которые были сделаны при разборе определенного документа?