The Manipulate / Locator stuff is mostly irrelevant to understand what's going on here.
Given exact input, your SortBy function returns exact expressions, which may be sorted according to their symbolic form, not their numeric value.
In[1]:= Arg[(Complex @@ #) - (Complex @@ {10, 10})] & /@ {{35,
10}, {20, 20}, {20, 15}}
Out[1]= {0, Pi/4, ArcTan[1/2]}
In[2]:= Sort[%]
Out[2]= {0, Pi/4, ArcTan[1/2]}
If you adjusted your SortBy function to always return real numbers, they would be sorted numerically.
In[3]:= N[Arg[(Complex @@ #) - (Complex @@ {10, 10})]] & /@ {{35,
10}, {20, 20}, {20, 15}}
Out[3]= {0., 0.785398, 0.463648}
In[4]:= Sort[%]
Out[4]= {0., 0.463648, 0.785398}
After dragging a locator, the corresponding value in pts goes from being exact to being real, so the result of applying the SortBy function to that point will be inexact, and thus be sorted numerically.