Thanks, fm, for the encouraging remarks. I actually have an AVR ISP MkII to hand, but hadn't got it to work as a PDI programmer before. After downloading the (fairly hefty) Atmel Studio 6, I got it to work on my Leonardo.
@MrBEEF: Below is the firmware from my Leonardo. Unfortunately Atmel Studio writes out 16-byte lines (they start with hex 10) and the firmware on the page below is in 32-byte lines (they start with hex 20):
However a few spot checks at addresses above 0x7000 appear to indicate the code is the same (I only checked a few bytes but you could do a more rigorous check).
Caterina-Leonardo:
My firmware:
http://gammon.com.au/Arduino/Leonardo_firmware.hex
The first part will definitely be different as I have one of my sketches loaded on it, but the part past 0x7000 should be the bootloader.