Why is my I2C device (VCNL4200) sending all zeros when I read from it, regardless of register?
It looks like the VCNL4200 expects a repeat-start between the two I2C commands, and you've got two separate commands with a stop between.

It's not very obvious from the data sheet, but this arduino driver doesn't send the stop message on WireEndTransmisson.

I suspect is the equivalent of i2cWrite(VCNL4200_I2C_ADDRESS, psDataRegister, 1, 1); becoming i2cWrite(VCNL4200_I2C_ADDRESS, psDataRegister, 1, 0); in your code.