rbardsley,
As crenn said, the debug println()s aren't "skipped". Here's a more detailed rundown on what's going on.
When the bootloader finishes waiting, it jumps to user code. Your call to USBSerial::println() defers to USBSerial::write() behind the scenes. Here's the source for that function:
https://github.com/leaflabs/libmaple/blob/0.0.11/wirish/usb_serial.cpp#L58
As you can see, USBSerial::write() defers to the libmaple proper function usbSendBytes(), which is nonblocking. If USBSerial::write() notices that USB_TIMEOUT (currently 50) milliseconds have gone by since the last time a call to usbSendBytes() successfully transmitted anything, it aborts.
Probably we should change the return values of USBSerial::write() and the USBSerial::print() family to uint32 so you can tell that nothing was printed (or possibly add a USBSerial::blocking(bool) method which could let you disable timeout).
The reason it exists is to make sure that stray println()s don't hang your program in case the USB host isn't connected or isn't asking for data.
FWIW, I use the method I outlined earlier all the time, and it works fine.