I have experienced the same problem in a range of applications: when I SSH from my Macs into Linux machines, the backspace key often stops working. I wasn't content to keep checking and un-checking the 'delete sends backspace' option, because these things ought to be automatic. I traced the problem to the Linux (Debian, at least) default terminfo entry for xterm-color. Terminfo is a database present on most Unix systems that tells programs how to interact with a variety of different terminals.

The solution: Copy the xterm-color terminfo file from a Mac to the Linux box. If you have Fink installed, get the file from /sw -> share -> terminfo -> x -> xterm-color; otherwise, use the one installed by default at /usr -> share -> terminfo -> 78 -> xterm-color. You can put the file in /usr -> share -> terminfo -> x/ on the Linux box (if you have root access), or in your home directory in ~/.terminfo -> x/ (create the directory structure if necessary). Then log out and SSH back into the Linux machine, and your backspace key should work properly in all applications.

This fixes zsh and screen for me, and keeps emacs working properly both on OS X and when SSH'd into a Linux machine.

This is a very common and very annoying problem. Your remote host expects some character to be used as "erase", a terminal program you use sending some character as "erase". If they differ - sometimes you getting ^? or ^H when pressing backspace. So to fix this you just need bring both parts in sync.
1. When connected type "stty -a" and in output find what is expected to be an erase code (erase = ^? f.e.)
2. Type CTRL-v and press your backspace. You'll see what code is sent as "erase". ^H f.e.
3. Type "stty erase ^H" and this is it. Now they'll understand each other.

Just log in to the machine and type "stty erase " (note the space after "erase") and then hit the backspace key. Either the last space will get erased (backspace functioning correctly, delete the rest of the line) or the correct control character will appear on the screen and you can just press return then.

Using Terminal, I can log into Debian Linux machines fine - and the delete key works as expected at the command line (so the "stty erase " trick erases the space) - but when I use pico the delete key becomes a "forward delete" key.

Any clues how I fix that..?

This behaviour does not happen when I log in with (shudder) Putty from a (shudder) Windows machine.

I have the same issue when logging into a RH 7.2 box from my PB. Everything works fine in the terminal but the minute I start vim my backspace is interpreted as a delete and erases the character the cursor is on. I am still not sure how to fix it...

I ssh to debian systems all the time. The simplest thing I have found is to open the terminal inspector for your window, use the menu to select "keyboard" and tick or untick the checkbox labelled "Delete key sends backspace"