If you try to follow the Arduino to Breadboard guide, you'll notice that programming the target chip requires removing the microcontroller from the Arduino board first. That's not possible if, like me, you have an Arduino Uno SMD.
The target board circuit is the same as shown in the guide. Burning the bootloader should work as described in the guide as well, although my chip already had the Arduino bootloader so I skipped that step.
Once we get to the Uploading Using an Arduino Board step, we deviate from the guide. Instead of connecting the Arduino's reset pin to pin 0 of the target chip, we need to tie it to ground. This means we'll have to manually reset the target chip when programming sketches; Inconvenient, but it works.
It helps to have a reset button on the breadboard, a small switch that grounds the reset pin when pressed will do. See Building an Arduino on a Breadboard (under "ATMEGA8/168/328 Basics") for pictures.
In the Arduino IDE, upload a sketch and as soon as it shows the binary sketch size, hit the reset button once and it will load the sketch onto the target chip!
Problems with Serial
Update: Serial works just fine, I'm not sure what problem I was having before.
I couldn't get serial communication between PC and Arduino to work. I was able to get some communication going with the Wire library, though, following the code in the Master Writer/Slave Receiver example.