Fantastic! Thanks for putting together this solution.
I verified that I can now build and upload sketches past the 30K limit. In my case the limit was even lower, around 28700 bytes -- maybe because I use a lot of PROGMEM strings (PSTR) to conserve RAM.
Here are the steps I took to fix it in case other people have the same problem.
First I had to get a new Uno (which happens to be the SMD version) to use as a programmer for my old Uno. I built and uploaded the "optifix" sketch from this thread
to the new Uno. Then I unplugged it (powered off) and hooked up the pins between the new Uno and the old Uno with breadboard wire as shown in this diagram
. After triple-checking my wiring I plugged the new Uno back into the computer, opened the Arduino serial monitor (which you might have to switch to 19200 if you're normally at 9600 baud), and saw that as soon as the "new Uno" reset it recognized the attached "old Uno" and burned the new bootloader into it. You can also type a "G" into the serial monitor to force another upload. Then I unplugged the new Uno from the computer (powered off), took out all the breadboard pins, and verified that my old Uno still worked -- but now had about 3K more of program memory to fill up!