Are all the other cases still using break instead of return?

It would seem the ID_CANCEL message from the second dialog is propogating into the message queue of the first.

Usually returning TRUE stops this... have you tried returning 0 (FALSE) both times?