It turns out that this command was implemented fine. It was the other commands that weren't correct (e.g. MainMemoryPageToBufferTransfer). They were calculating the page number using the math for a chip operating in 256 byte mode. This chip is operating in 264 byte mode.
Changing my addressing for those commands from:
SPIShift(opcode);
SPIShift(pageNumber >> 8);
SPIShift((unsigned short)pageNumber, 0x00));
to:
SPIShift(opcode);
SPIShift((unsigned char)(pageNumber >> 7));
SPIShift((unsigned char)(pageNumber << 1), 0x00));
And that sorted it. My tests were passing because both the read and write operations were using the same flawed logic for specifying the page number, leading me to believe that they were working correctly.