Thanks for your bug report. mIRC always sends a QUIT when a server connection is closed. This can be confirmed by using /debug on to output to a debug.log. However:
When you use /quit, mIRC will wait until the server closes the connection.
When you use /disconnect, mIRC will detach the socket connection from the status window and will keep it open in the background for a few seconds waiting for the server to close the connection, which may or may not happen depending on the network state. In one version of mIRC, this was changed to behave like /quit, so that a /disconnect would only complete once the server closed the connection, however many users complained about the delay and it was reverted and the current behaviour was implemented.
When you use /exit, mIRC closes all sockets immediately, so a QUIT may or may not reach the server. There is no way of ensuring that QUIT has reached the server after an /exit without keeping mIRC open for several seconds, ie. blocking the mIRC GUI to prevent further input or hiding mIRC in the background, in the hope that all servers you are connected to receive the QUIT and close the connection, which may or may not happen since it will depend on the network state. It is questionable whether mIRC should be forced to stay open in such a situation, as the user has explicitly asked for mIRC to exit.