How are you timing the execution time of the code and the completion of the transfer i.e. the occurence of stop bit is on the physical line and the returning of the API is code execution. How are you timing the 2?
Can it be that your SCL and SDA lines are driven to an invalid state from externally? I had a similar issue and then found that the SCL and SDA lines got driven to 1.25 V by a faulty hardware.
Maybe also worth checking the return values of your I2C init function.