The issue was that I didn't realize that the server was sending multiple messages within a single packet.
My client was correctly decrypting the first message, but not the second.
The server response looks something like this:
(encrypted packet 1 || MAC 1 || encrypted packet 2 || MAC 2 ...)
But I was expecting it to looks like this:
(encrypted packet 1 || MAC 1)