MasteRя встречался с этим и даже описывал это где-то здесь. Эта функция глючит, если она отнимает опыт у героя, а тот в это время получает опыт после сражения. В общем, нужно делать паузу слипом и только потом отнимать опыт.
Интересный момент состоит в том, что герой в боях опыт не получает вовсе из-за действия функции SetHeroesExpCoef(0). Коэффициент становится =1 только уже после боя и отнятия опыта.