Trying to read data from MKR MEM Shield

I'm trying to play around with the MKR MEM Shield flash memory using SPI communication with an Arduino Uno. Some commands I use work and some don't and I can't figure out why. The chip in use is W25Q16JV.

Commands that just require to send an instruction and then receive data work fine, like this example that reads from Status Register 1:

#include <SPI.h>

byte data = 0;
const int CS = 10;
const byte status_register_1 = 0x05;

#define SPIcomm SPISettings(4000000, MSBFIRST, SPI_MODE0) 

void setup() {
  pinMode(CS, OUTPUT);
  Serial.begin(115200);
  SPI.begin();
}

void loop() {
  SPI.beginTransaction(SPIcomm);

  digitalWrite(CS, LOW);
  SPI.transfer(status_register_1);
  data = SPI.transfer(0);
  digitalWrite(CS, HIGH);

  SPI.endTransaction(); 
}

This code returns the correct values of the Status Register.
However, commands that require me to send an instruction followed by an address (or dummy bytes), and then receive data don't seem to work. Like this example to read the device ID:

#include <SPI.h>

byte data = 0;
const int CS = 10;
const byte device_id = 0xAB;

#define SPIcomm SPISettings(4000000, MSBFIRST, SPI_MODE0) 

void setup() {
  pinMode(CS, OUTPUT);
  Serial.begin(115200);
  SPI.begin();
}

void loop() {
  SPI.beginTransaction(SPIcomm);

  digitalWrite(CS, LOW);
  SPI.transfer(device_id); //Instruction
  SPI.transfer(0);            // Dummy Byte
  SPI.transfer(0);            // Dummy Byte
  SPI.transfer(0);            // Dummy Byte
  data = SPI.transfer(0); // Data in from memory
  digitalWrite(CS, HIGH);

  SPI.endTransaction(); 
}

This code simply returns the value zero instead of the device id value.
I've attached the clocking figures of those instructions, if anyone has any insight on why this doesn't work I'd appreciate it.

Are you using a level shifter between the Uno and the MKR Mem shield? The Uno is using 5 V logic, but the W25Q16JV is a 3.3 V device.

Yes, I am using a level shifter for 3.3V. You think this might be a hardware problem? Since I still get some commands to work.

Not necessarily. I was just checking, since you didn't mention the level shifter and a lot of people don't realize the difference between the Uno and the MKR boards.

After probing around a bit with a scope I can see that the CS line, for some reason, doesn't go all the way down to 0V when it's written low, and instead goes to about 1V. The CS line coming out of the level shifter (while not connected to the mem shield) goes down to 0V as intended, however when I connect it to the mem shield, it only goes down as far as 1V.

All of the other signals (MISO, MOSI, CLK) work fine and go high and low like they should.
So far I am unsure as to why this is happening (Or even if it's related to the first problem I mentioned). Has anyone encountered something like this before? Do you place some sort of filter or a component from your level shifter to the mem shield's CS line?