I rebooted from my system CD, it refused to mount the boot partition but I ran a disk repair on it and it fixed a couple of problems. Still no luck on the reboot though. I couldn't disable journaling as that requires you to first mount the disk - a problem if the disk won't mount due to bad journaling information! I connected the machine to another OS X system using Firewire target disk mode. Even with the force of the OS X terminal, I could find no way to mount the disk (it would always report 'Volume mounted OK,' and then not mount it), and no way to turn off journaling without mounting the disk.
My system had OS 9 installed on another partition. So I booted into OS 9, and it mounted the dodgey OS X parition with no problems, and gave me full access to it. I assume this is because OS 9 simply ignores the journal. Norton Disk Doctor reported no errors on the disk. I backed up all my files using OS 9, then shared the volume across the network, and mounted it on another OS X machine. I then used the Terminal to rm the .journal and .journal_info_block hidden files on the dodgey OS X volume. These files contain the disk journal information.
I rebooted into OS X in verbose mode. It reported that it couldn't find the .journal_info_block file and was going to disable journaling. It then proceeded to boot fine. The system now appears to be functioning normally. That is basically how I recovered a disk with a bad journal that refused to mount in OS X. Hope this helps someone!
[robg adds: This will clearly only work for machines capable of booting OS 9. If anyone can suggest a non-OS 9 solution, please do so in the comments...]

