If SimpleEval only counts material, how is it possible that it occasionally shows fractional eval? As I understand chess engines, they search the game tree and return the eval function on the final position of the search tree. Since SimpleEval only counts material, its eval ought to change in steps of 1. Yet on move 42 of this game, it shows an eval of -4.25. There's no material combination that could possibly yield that eval. What's going on?
I took a peek at the code given in a comment. It seems to have a small semi-random factor added to the evaluation, probably so it can more easily just pick a move from all the ties that are going to come up. However, the size of the score difference appears to be greater than what could be explained by just this. Also, at move 65 it evaluates the position as -M3 but there is clearly not a mate in 3 from that position.
The false mate clearly shows that there is a bug somewhere.
There are other anomalies too, like around move 14 or so (though these may be rounding errors?). Do you have SimpleEval's code to be sure that it is only counting material.
One possible explanation (though not relevant in this case) is that sometimes a bishop pair is valued at 6.25 rather than perhaps the naive 6 you would suggest).