A few points: the best way to do this is to use a transaction that spans both queues; this way you know that you will not lose the message.
The second part should be careful about how queues are created and how to send messages in the second place. In particular, MSMQ sometimes seems to “fail” when sending a message (although the error message is actually written elsewhere in the dead letter queue), especially if the transactional send parameters do not match the transactional nature of the queue target.