This is due to the way the I2C function is doing a start, stop and then start. If you use a repeated start like in the Software Development guide app note (https://www.ti.com/lit/an/sluaa11/sluaa11.pdf) then the CRC would include the bytes for the first write [0x10 0x14 0x11 0x01]. However, since you are doing a stop and then a start, it seems like it will calculate CRC only on the 2nd transaction [0x11 0x01].
In ST you can use
HAL_I2C_Master_Sequential_Transmit_IT(); instead of
HAL_I2C_Master_Transmit()
Code :
char cmd=0x14;
char readbuf[4]={0,0,0,0};
HAL_I2C_Master_Sequential_Transmit_IT(&hi2c1, 0x08 << 1, &cmd, 1, I2C_FIRST_FRAME);
while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY);
HAL_I2C_Master_Sequential_Receive_IT(&hi2c1, 0x08 << 1, readbuf, 4, I2C_LAST_FRAME);
while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY);