The use of assumptions in step 1 inside the Refine does not make those assumptions available outside that Refine.
In step 3 those assumptions were no longer in effect and it was only because the arguments were already simple enough that some automatic cancellation happened in the product.
If you make assignments to $Assumptions then the Mathematica functions which check that will make use of those.
Thus
In[1]:= $Assumptions = {?, ?} \[Element] Reals;
In[2]:= Refine[{{Cos[?/2]}, {E^(I ?) Sin[?/2]}}.ConjugateTranspose[{{Cos[?/2]}, {E^(I ?) Sin[?/2]}}]]
Out[2]= {{Cos[?/2]^2, E^(-I ?) Cos[?/2] Sin[?/2]},{E^(I ?) Cos[?/2] Sin[?/2], Sin[?/2]^2}}