My code needs Serial.begin to work but I do not need Serial support in my code

Like PeterH, I suspect that the Serial.begin is causing something to be initialized a specific way that allows your code to be run. Unfortunately, again like PeterH, I don't know what it is.

However, your code seems to indicate you are comfortable with lower level control of the IC (like manipulating registers). Therefore, if you don't get a response from someone more knowledgeable, my advice is to poke around the Serial library to see what exactly is being initialized then duplicate that in your code. Then via experimentation and process of elimination you can figure-out what is enabling your program to work correctly and only include that in your final program.