millis() resets every time I open the Serial Monitor

It will autoreset (except when disBled as i described above)when connection is opened on the hardware serial port only - the same port you upload on. It does not apply to software serial ports or serial ports other than the first one on boards with muliple.serial.ports. Search for info on the dtr reset circuit for more background - details have been discussed ad nauseum.

It is needed to reset into the bootloader so you can easily upload a sketch (before the dtr trick was figured out, the early arduino boards had you press the reset button at the exact right moment in order to upload, it was awful)