sshd not setting locale
Turns out there were two problems here:

First, PuTTY wasn't actually sending any locale information. Apparently the Linux servers were configuring the locale automatically, or based on TERM or something. I fixed PuTTY by configuring environment variables for it to send:



Second, I'm using MacPorts (updated question since this was missing in the original), and MacPorts ssh does not send locale variables. I can't imagine why MacPorts configures SSH this way, but I had to add the following to /opt/local/etc/ssh/ssh_config:

Host *
  SendEnv LANG LC_*


That really ought to be the default MacPorts config; it's the default on any standard Linux system, and it's even the default in OSX's own SSH. Figured out that MacPorts was part of the problem when SSH from Linux to OSX did set the locale.

I've filed a ticket with MacPorts suggesting the default be changed.