There is no practical reason why this conversion was done.

However, it is a quite useful one. Intuitively, it should be quite clear: q1 ↔¬q2 means that q_{1} and ¬q2 must have the same value. As one of them is negated, this is the same as the values need to be different. That's exactly what xor checks.

By the way: Your first line of equations is already a good start. Let's not negate the xor though:

(a ⊕ b) = a∧¬b ∨ ¬a∧b = a∧(¬b) ∨ ¬a∧¬(¬b)

This looks pretty much like the DNF-Version of biimplication, doesn't it? Just that the right operand is ¬b:

= (a↔¬b)