hWhoDialog needs to reset to NULL when the dialog is closed by the user.  I believe you would do this in the WM_CLOSE message handler in WhoDialogProc.

(This is why I typically set a variable like hWhoDlg in the WM_CREATE / WM_INITDIALOG handler in the same function.  That way the variable is always being set or cleared in the same function.  I think it's done that way in the mail dialog file I've mentioned a few times in this review.)