By writing some additional 8080 test programs, running them on both the Sol-20 and my simulator, and comparing the output, I’ve found and fixed several bugs in my simulator. Now the 8080 Exerciser running on the simulator matches all the CRCs.
There was a bug in “POP PSW” setting the parity flag wrong, which screwed up all of the CRCs.
I had the polarity of the AF flag wrong for the subtract, compare, and decrement instructions.
In the DAA instruction, to determine whether to correct the high nibble, at one point in the logic I was using AF when I should have been using CY.
While it remains possible that the simulator could contain some errors not caught by the exerciser, at this point I’m fairly confident that it is working correctly. W00t!