Add level shifters to allow your 5V processor to interface to your 3.3V logic. Depending on what you are interfacing to, this may be as simple as a few resistors, or as complicated as a few more chips or FETS.
Change the regulator.
Even though it is outside of spec, the ATmega328 will run at 16MHz with a 3.3V supply. We have been doing this with our [Mongoose 9DOF IMU, and I know the guys at Flytron have also been doing it on a few of their products and I haven’t seen or heard of any problems. So the simplest solution may be to just change the regulator to 3.3V and leave the bootloader crystal and code as is.
Change the regulator, crystal, and bootloader.
If you want to operate the processor within spec you will need to do the following:
i) Change the reg to 3.3V
ii) Change the crystal to a 8MHz version
iii) Change the bootloader to “Arduino Pro or Pro Mini (3.3V 8MHz) w/ ATmega328”
To change the bootloader you will need a AVR programmer such as the [AVRISP mkII. Startup the Arduino IDE, select “Arduino Pro or Pro Mini (3.3V 8MHz) w/ ATmega328” from the “Tools” → “Board” Menu, plug the programmer into the 6pin ISP port on your board, and then select “Tools” → “Burn Bootloader” → “w/ AVRISP mkII”.](DigiKey - Electronic Components Distributor)](Welcome store.ckdevices.com - Hostmonster.com)