I received the new controller, but when I connected it the results were the same. Hmmm...
The next step was to check the relays and the circuit breaker. I had battery voltage going both in and out of the circuit breaker, so that's fine. When I bypassed the controller and put power to the circuit I could hear the relays actuating.
Next was to check power to the fans. There's a single power wire that connects to wiring from each fan, as well as matching ground wires. I checked the connection and there was power to the connector. Is it possible that both fans failed?
So, I removed the fans to test them. Lo and behold they worked individually and together. Well, that's a puzzler - why are they working fine in a bench test but not in the car?
The culprit? A corroded grounding lug (see photo). Battery voltage doesn't matter when there's no ground. I should have checked the power AND GROUND before pulling the fans out. Aaarrgghh.
Anyway, now I get to fix and improve not only the ground connection, but also clean up some of the wiring while I'm at it.