
Then you upload the ArduinoISP sketch to that board.

Not clear immediately to me was the fact that you first must set the IDE for the board being used as the ISP (2009 in my case).

In my case, I set up a standard Arduino 2009 as the ISP. This is the step where you disable autoreset on the Arduino being used as the ISP device (see more below). Like many have already noted, it is missing step 1.5. Using an Arduino as an AVR ISP (In-System Programmer) is mostly right. Get the updated optiboot_atmega328.hex and optiboot_atmega328.lst files here (github). Turns out this was a known problem - just not by very many people, including me. On my system, it caused my DIP 328p to lose its sketch every time power was switched off. The optiboot hex file that was shipped with IDE 0022 is buggy. I welcome corrections, but this is what I think I learned from the experience:

