dme, you are so close to having it right
Let the job be a real-time journey with no fixed end. Then loop() is a single turn of the wheel.
The wheel may turn many times between each serial char becomes available.
The code inside loop() should be enough to do anything you need yet for any turn of the wheel only do what is needed right then.
Once you digitalWrite a pin, it stays that way.
Read up on else to go with if: http://arduino.cc/en/Reference/Else
and read up on switch-case: http://arduino.cc/en/Reference/SwitchCase
They are short and will help with your future code.
Using delay() stops the wheel for a while. Someone nice here will show you how to use millis() to time events then you can do multiple things at once or you can read this: http://www.gammon.com.au/forum/?id=11411