I figured it out. There were basically two subtle errors on my part that threw it into an in-deterministic state. I walked away from it for the afternoon and I picked out what was wrong almost immediately after I looked at it just now. A break is a good thing.
Since I made a small program that isolated the problematic code I’ll make a part 4 of my serial communication series.