I figured out the oscillating wave form, but I'm still getting garbage input from UART_ReadByte, or UART_ReadBlocking. Here's the pattern I've observed, and it's consistent across device resets:
'a' 141 - 0110 0001 : 216 - 1101 1000
'b' 142 - 0110 0010 : 249 - 1111 1001
'c' 143 - 0110 0011 : 249 - 1111 1001
'd' 144 - 0110 0100 : 218 - 1101 1010
'A' 101 - 0100 0001 : 208 - 1101 0000
For example, when I press 'a' on the keyboard, I see an 'a' on the 'scope screen, but reading the byte in the code returns 216, instead of 141. And so on with the other values. 'b' and 'c' are weird in that they both return 249, instead of individual values.
The UART and serial emulator on the PC are both configured for 9600/n/8/1. Again, the values I listed are consistent across restarts, but do show up correctly on the oscilloscope.