I ended up getting a few things.
First, I got a cheap $10 logic analyzer that was supported by Sigrok. Second, I got a fresh set of chips from a different manufacturer, plus more ribbon cable so that it wouldn’t risk devolving too far into a rat’s nest.
Third, I decided that I’d solder up a tiny little board with the power circuit, the switch, the reset button, and the CPU clock.
I did a quick test and it looked like for a bit that the single-step clock might be a problem because it was looking a lot more like it was properly looping when I hooked up the logic analyzer.
I ended up stripping the board of most of the wiring and starting over with a fresh set of parts, starting off from having just a CPU and a NOP-generator, through the part where it runs a loop in Flash RAM. I was able to use Sigrok to decode the values on the data bus and validate that it was doing the exact right thing.
Then I spent some time mucking around with serial lines, trying to make sure I had the right connections, and from there, I was finally able to get the serial port up.
Then I was able to go back and replace parts and determine that the 65c02 I had was somehow faulty. Not sure if it was always bad and somehow a defective part made it into the supply chain or if I’d zapped it at some point in the past.