EV3 - At what time DIRECT_REPLY is sent by brick?
I have the same observation as you, it seems to be sent as soon as the brick receives the command. 

A workaround that I have found is to send a "stop motor" command after every movement, this way you know when the motor is stopped for sure.

Out of curiosity, what library are you using?

EDIT:

Have you been capturing the packets that the EV3 sends back to the computer?