Can only load sketch after fresh bootloader install on bare AT328

I am using a bare AT328p and using the "Programmer as ISP" option and then burning the bootloader. That all works fine and I can then successfully download a sketch. However it only works with after a fresh burnt bootloader. I can't load a new sketch directly after the old sketch and have to burn the bootloader again. The sketch has nothing in it except a single LED flash. I have looked at the TX, RX line on a scope and I can see activity, but I get "programmer not responding" and "not in sync". Any ideas?

The "can only upload once after burning bootloader" symptom likely indicates that you don't have a functioning auto reset circuit.

ATmega328P-based Arduino boards have a special circuit that automatically resets the microcontroller when the upload starts to activate the bootloader. Without this circuit, you need to manually reset the microcontroller just as the upload starts (but after the compilation finishes). When you burn the bootloader, the flash memory is erased, so the board stays permanently in bootloader mode. This is why it's possible to upload the first time without resetting the board.

So you either need to manually reset the board or else add/fix the auto reset circuit. The auto-reset circuit is a 10 kohm pull-up resistor on the reset pin and a 0.1 uF capacitor in series between the DTR or RTS pin of the USB to serial adapter and the reset pin, as shown here: