Thanks guys. The suggestion to add output to the setup function was spot-on. Turns out the Arduino was resetting when the serial monitor opens and taking longer to do so than I had anticipated. It looks like most of my problems were a result of sending data before the Arduino was ready to receive it.