You could also add a wire (or switch) to keep reset low until you are ready to start downloading.
Remove the wire when the IDE shows "Compiled xxx of 32xxx bytes".
I'd say that method is not good enough and is fraught with potential peril
as with that method, depending on the exact timing of the wire pull and when avrdude finally gets a chance
to run, it could still be possible for the processor to take off
from the bootloader and be into the user's sketch before avrdude has a chance to put the AVR back into
the bootloader for downloading.
If the previous circuit used a pin as an output and the new circuit used the pin as an
input, depending on the code and the circuit design there could be short between the pin and ground when the pin
is being held high.
An example worst case would be that the old code was immediate turning on an LED by setting a pin high,
and the new circuit design is using the pin as an input with a normally closed button.
As soon as the code starts running you have a dead short on a output pin that is being
driven high. Not sure how long the pin will last under those conditions.
There is also the case where the pin is still an output but is controlling something external to the Arduino.
For example, a motor or a relay that controls something else.
While there wouldn't be any damage to the Aduino in this case, it may cause damage to something else
as old code may cause something unexpected to activate on the new circuitry.
An easy thing to do is burn the blink demo sketch before hooking up the new circuit
just to ensure that the old code is gone. That way you know it is gone and the only potential
issue is the pin used for the LED.