Progress, I think.
$ badblocks -nsv /dev/sdb4
I think this mapped out the bad blocks, because they don't show up in subsequent scans. Once the bad area is found, you can narrow the search:
$ badblocks -nsv /dev/sdb4 46555000 46542000
I ran it several times to make sure I'd found them all.
The block numbers reported by badblocks do not match the listed bad block in /var/log/messages, apparently because badblocks counts only blocks within the partition, not on the whole disk.
Then I used mdadm to add the (repaired?) devide back into the RAID mirror set:
mdadm /dev/md2 --add /dev/sdb4
software RAID status file is /proc/mdstat
software RAID config file is /etc/mdadm.conf
It took ~ 18 minutes to rebuild a 60 GB mirror set.
Rebuilding uses less than 1% CPU time on an Athlon64 3700+, I guess most of it is I/O that is handled in the chipset.
The rebuild finished OK, I suppose I'll have to keep an eye on it.
Explore the Core!