This doesn't strike me as a very good authentication protocol. You can view $(Mrand, \textsf{AES}_{TK}(\textsf{AES}_{TK}(Mrand \oplus p_1) \oplus p_2))$ as an attempt of a randomized CBC-MAC of $p_1\|p_2$, with $Mrand$ being the initialization vector.
Unfortunately, randomized CBC-MAC is completely broken as a MAC. Suppose an adversary sees a valid MAC $(R,T) = \bigl(R, \textsf{AES}_K(\textsf{AES}_K(R \oplus p_1) \oplus p_2)\bigr)$ of a message $p_1 \| p_2$.
Then it can produce $(R \oplus \delta, T)$ which is a valid MAC of message $(p_1 \oplus \delta) \| p_2$.
Apart from the poor attempt at a MAC, this protocol suffers from trivial replay attacks.
Each party chooses a random value that affects only their own messages.
To prevent replay, each party should bind their protocol messages to a random value chosen by the other party.
There is even a reflection attack. In this protocol if the master sends $Mrand, Mconfirm$ then the client can echo back $Srand=Mrand$ and $Sconfirm=Mconfirm$, which should verify correctly unless there is more to the protocol than you mention.
The result of these attacks is that one endpoint believes that it is successfully paired, despite the other endpoint not knowing the out-of-band key $TK$. The attacker cannot derive the session key, though.