I believe you'll also need to set it again when the result is removed.
AFAICT the get_message_reply handler assumes that QS_SMRESULT is already set when it's called, and just resets it when removing a result if it should be clear. It shouldn't be possible for get_message_reply to be called when QS_SMRESULT isn't set, because wait_message_reply always checks for that bit first.
But now that you mention it, get_message_reply does have that 'cancel' argument, and if for some reason we did cancel a sendmessage before it has a reply, that bit wouldn't be set when it should be. I'll send a follow-up.