I see that you have used manual low-level API for write operation and buffer high-level APIs for read operation.
It is not an expected use case to mix manual and buffer APIs.
It is strictly recommended not to mix low level (byte) and high level (buffer) APIs.
Buffer APIs check the state of I2C; If I2C state is not idle or halt, the API does nothing because it assumes that the master is busy.
In SCB v3.20, the I2C state after using byte access APIs is idle or halt state.
In SCB v4, the I2C state is read or write. This state could not be recognized by high level (buffer) APIs. That is the reason for the above piece of code to work in older versions.
However, as this not an expected use case, you could use one of the following two methods in your application.
1) Using low-level APIs
2) Using high-level APIs
while ((I2CM_I2CMasterStatus() & I2CM_I2C_MSTAT_WR_CMPLT) == 0u);
while ((I2CM_I2CMasterStatus() & I2CM_I2C_MSTAT_RD_CMPLT) == 0u);