The switch from checking _sock against a default value, combined with the checking for unconnected clients in status(), broke the Client. I went back to checking the value of _sock against the default and removed the _connected member altogether because it was redundant (and therefore needed to be kept in sync with _sock).
Because the Mega uses a different pin for SS of the W5100, the SPI library wasn't setting it as an output. It was only setting the hardware SS pin of the ATmega1280, which is elsewhere on the board. Adding initSS() to W5100.init() fixed it.