THE ANSWER, or at least *an* answer:
It would appear that some plugs won't do the JTAG thing. No matter what you do, you'll always get "JTAG scan chain interrogation failed: all zeroes" or some such. The answer to that problem I'm going to leave to someone with more time than I have.
My plug is an early plug, ordered in March 2009. Its reset button is on the opposite side of the plug from the card slot.
It was possible to update U-Boot and install an OS without using JTAG. I needed a working serial connection to the plug, however, and something like putty (don't use minicom!). Here's what I did (WARNING: SKIP THE U-BOOT UPDATE UNLESS YOU'RE SURE YOU NEED IT; IF IT FAILS, YOU WILL HAVE A BRICKED PLUG):
Copied the files in sheevaplg-installer-v1.0/installer to a FAT32 USB flash drive and inserted the flash drive into the plug.
Made a serial connection to the plug.
Used a straightened paperclip to hit the reset button.
Pressed any key at the appropriate point to interrupt the boot and get a Marvell prompt.
Used the "printenv" command on the plug to find the "serverip" address (which was 10.4.50.5 on my plug but may differ on yours).
Set up a tftp server on a laptop set to that address, connected to the plug's Ethernet jack with a crossover cable.
Copied the uboot.bin file from sheevaplug-installer-v1.0/uboot into the tftp server directory as "u-boot.bin".
Used the "bubt" command on the plug to retrieve and install the U-Boot file (NOTE: IF THIS HAD FAILED, I WOULD HAVE HAD A BRICKED PLUG WITH NO HOPE OF RECOVERY!).
Restarted the plug and stopped it at the Marvell prompt.
Used "cat sheevaplug-installer-v1.0/uboot/uboot-env/uboot-nand-custom.txt" to display the commands needed to import and install the OS.
Entered the commands via copy and paste, one at a time, into the plug at the Marvell prompt, after the word "setenv", thus:
setenv bootargs_root ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifsmtdpartitions
setenv ethaddr xx:xx:xx:xx:xx:xx (using the address printed on the back of your plug in place of xx:xx:xx:xx:xx:xx)
setenv real_bootcmd 'setenv bootargs $(bootargs_console) $(mtdpartitions) $(bootargs_root); nand read.e 0x00800000 0x00100000 0x00400000; bootm 0x00800000'
(note: failure to insert the single quotes will cause a premature reboot)
setenv bootargs_console console=ttyS0,115200
setenv bootcmd run recover1
(Note: I had to put single quotes around the arguments of all of the sollowing setenv's.)
setenv recover1 'setenv mainlineLinux yes; setenv arcNumber 2097; setenv bootcmd run recover2; saveenv; reset'
My plug complained that the recover2 arguments were too many, so I broke this command into recover2a and recover2b, thus:
setenv recover2a 'run recover3; setenv bootcmd $(real_bootcmd); saveenv'
setenv recover2b 'setenv bootargs $(bootargs_console) $(mtdpartitions) root=/dev/ram0 rw ramdisk=0x01100000,8M install_type=nand; bootm 0x00800000 0x01100000'
setenv recover2 'run recover2a; run recover2b'
setenv recover3 'run recover4; nand erase clean 0x00100000 0x00400000; nand write.e 0x00800000 0x00100000 0x00400000'
setenv 'recover4 usb start; fatload usb 0 0x00800000 uImage; fatload usb 0 0x01100000 initrd'
Having got through all of this, I now entered:
...and the OS was loaded, the plug rebooted, and I got a login prompt.