There is just one thing in the Msmq API that I hate.
If you try to send to a queue using the wrong transaction, it will silently not send you message, but give absolutely no error.
This is incredibly error prone, and has caused me quite a number of bugs.
If at all possible, API should never silently fail. In this case, the API should throw an explicit argument exception, saying that this transaction is not valid for this queue.
That would make things much simpler all around.