Does assigning variable in SELECT do RBAR operations?
It almost seems like for each value returned, that value is assigned to the variable, then each row in the result set is subsequently assigned, almost like a loop.


Yep.  That's what happens.  This is a side-effect of how variable assignment in SELECT queries were initially implemented.  But it was used enough that it can't really be changed, and even is documented:


  If a SELECT statement returns more than one row and the variable
  references a non-scalar expression, the variable is set to the value
  returned for the expression in the last row of the result set.


Variables (Transact-SQL)

and


  For backwards compatibility reasons, SQL Server provides support for
  assignments of type SELECT @p = @p + 1 ... ORDER BY at the top-most
  scope.


Ordering guarantees in SQL Server