Well I had started to write that all should be fine, then a light went on. The datasheet says that the voltage on any pin (except RESET -- for high-voltage programming) cannot be less than -0.5V or more than Vcc + 0.5V. So I wouldn't drive an MCU running on 3.3V with 5V signals. I'd either level-shift the programming signals or why not just run the programmer on 3.3V too. I've done ICSP programming at 3V and 3.3V as well as at 5V, flash as well as EEPROM should work down to 1.8V per the datasheet. I'd breadboard it up just to convince myself, but that's the way I'm reading it. I'd seriously lean toward running the programmer at 3.3V if possible, but if not, bi-directional level shifting seems like overkill. SCK and MOSI are inputs to the target, MISO is an output, etc., so one-way shifting should suffice.
HTH!
Aha, I didn't realize that the programmers could run at 3.3V. I assumed (bad idea) that since the USB power was 5.0V, that the output voltages on the ISP lines were also 5.0V. It appears that the Atmel AVRISP MkII can drive the ISP lines at whatever voltage is required by the circuit (built in level shifters for ~1.8V to 5.0V), although it won't power the circuit from the USB (power applied externally?).
So, if my understanding is correct, I will have to power the circuit externally, connect the AVRISP to the circuit, change the settings in AVR Studio to 3.3V target voltage (in which case the AVRISP will measure the voltage on it's VCC/GND lines to ensure it's actually 3.3V), and then I can program without installing level shifters or anything else on my board. Sound right?
Just to clarify, does the ATmega ignore fuse-settings while RESET is held? The reason I ask is if the ATmega is setup for say 4.8V brown-out detection from the factory, and I solder it to my board, which will run at 3.3V, and then try to program it at 3.3V, will it still program? Once the fuses are properly set, I'd imagine this is not a problem, but what about before? Thanks!