Yes, I tried it, although I don't promise that it works in precisely the latest build combination, but the code for it should be fundamentally fine. Yes I definitely had inversion problems at certain stages of developing a solution at least. This is precisely one of the biggest cases the simulator came in very very handy. You can step through tick for tick and watch what the timer ramps and matches are doing and see when the interrupts get called, and watch your portb values.
I don't recall all the details now, maybe it will come back to me. Just looking quickly at my code, it seems I set portb on compare match, and clear portb on max. That does sound pretty backwards and even seems contradictory to my not very clear comments for the interrupts, and I kind of recall being temporarily((and now again) confused by this. I'll see if I can get a chance to run the simulator in the next few days and try to remember what's going on.
Mostly unrelated, but the biggest problem in the end was getting the light to shut off. Again I forget the details, but there is some delay or jitter in the interrupt calls that makes full off not happen. So I passed a global (actually a general purpose register bit, to facilitate streamlined assembly interrupts) to the interrupt handlers that disabled them entirely for mode 0. I didn't test extremely low modes extensively. As I recall the timing error on the simulator was around 6 timer ticks, but the simulator runs I think at 1MhZ, so one could hope that's about 1 tick in the real world.
Wish I could remember this better, might soon.