This is indeed very strange. In order to rules out any whitespace character stuff, I have rearranged the code in a way, that it definitely uses the same arguments.
mat1 = {{60, -100, 50}, {59.5, -100, 50}};
mat2 = {{0.18125, 1.45, -0.3625}, {0.1845, 1.44, -0.36}};
vec = {r, s};
eq1 = Thread[{h1, h2} = mat1 + vec*mat2]
Solve[h1 == h2]
RowReduce::luc: Result for RowReduce of badly conditioned matrix {{-0.1845,0.18125,0.5},{-1.44,1.45,0.},{0.36,-0.3625,0.}} may contain significant numerical errors.
NSolve[h1 == h2]
{{r -> 110.345, s -> 111.111}}
eq2 = Thread[{h1, h2} = mat1 + Reverse[vec]*mat2]
Solve[h1 == h2]
{{r -> 111.111, s -> 110.345}}
NSolve[h1 == h2]
{}
So for eq1 Solve reports an error and does not find a solution, but Nsolve does.
For eq2 Solve gives the solution, but NSolve does not find a solution but also gives non error message