Thank you both for your input. I discovered the problem and am embarrassed to say it wasn't the controller. The quadrature-output encoder apparently only reports data every 96 microseconds, not in real-time. This was not in the encoder's datasheet, I had to do much digging to find this.
Very...