PWM and Serial Monitor Inputs

Question about PWM. I'm controlling the brightness level of a LED and I'm using a 9 volt battery to power the LED rather than arduino's own 5 volt source. When using PWM to vary the brightness from 0 to 255 does that brightness stay true for all levels? Meaning that when the 9 volt battery begins to lose voltage say bellow 8 or 7 volts, will that affect the brightness of the LED? Will a 200 brightness level with a fresh 9 volt be the same as a 200 brightness level with the same 9 volt but discharged to 7 volts? Does PWM act as a voltage regulator or somewhat analogous to a joule thief where it would collect enough power to reach a minimum threshold?

I'm also having trouble looking up references on how to use the Serial monitor command. I want to be able to input different brightness values for my LED through the serial monitor and just send that in rather than upload the same sketch over and over again when I make a change to my code.

I'm controlling the brightness level of a LED and I'm using a 9 volt battery to power the LED rather than arduino's own 5 volt source.

How? A schematic would be useful. I presume that you are using PWM to turn a transistor on and off, but I want to be sure.

When using PWM to vary the brightness from 0 to 255 does that brightness stay true for all levels? Meaning that when the 9 volt battery begins to lose voltage say bellow 8 or 7 volts, will that affect the brightness of the LED?

Of course the brightness is a function of the battery voltage. You are using PWM to turn a transistor off and on. The Arduino has no idea that the battery is going dead, so it can't increase the duty cycle to account for that.

Does PWM act as a voltage regulator or somewhat analogous to a joule thief where it would collect enough power to reach a minimum threshold?

Neither. It simply turns a pin on and off at high frequency.

I want to be able to input different brightness values for my LED through the serial monitor and just send that in rather than upload the same sketch over and over again when I make a change to my code.

So, what is the problem? Proper code on the Arduino will read a value from the serial port. The Serial Monitor application (not command) can be used to send the serial data (make sure that the line ending setting matches what you program the Arduino to expect).