I am hoping to bow out of this discussion at my first opportunity, as the code/design makes perfect sense to me already and I don't see the need to go rearranging everything
nor do I have the time/inclination to discuss it, or re-live it, here is a FREE working example, what more could you ask? Don't break it then blame it is all I ask.
It could be doing a read in an interrupt was part of the problem, I don't know for sure. It wasn't reliable though. Having a tight interrupt routine on rising and one on falling seemed to fix it. Interrupts need to be tight, signals can bounce a bit, etc.