The reason is that each GCode input channel can only process one command at a time. Ordinary movement commands are placed in a queue for later execution, so unless the queue is full, processing them happens immediately. But when a homing move is executed, the system has to wait until it completes so that the axis positions can be reset. So processing it doesn't finish until the move does.
The same applies to all input channels. So if you initiate a homing move from DWC, you can execute M408 and other non-motion commands concurrently from serial; and vice versa.
HTH David