First, just on general principles, I changed the door gasket. The old gasket was slightly compressed with age. That helped a little, but it didn't fix the problem.
I tested the bottom spray arm with a water hose outdoors and could see it was spraying sideways out a crack along one side joint. It's only supposed to spray upwards. The bottom spray arm is almost exactly level with the bottom of the door, and there is no gasket there, just a 'baffle', so any forceful spray hitting right there would likely get past the baffle. Changing the bottom spray arm fixed the problem entirely.
Since the machine is over 10 years old, I also changed the top spray arm just out of prudence, but it probably didn't need it... just being cautious. A leaking dishwasher can cause a lot of damage to your kitchen!