What exactly does the last_value() window function do?
This happens because default window frame is range between unbounded preceding and current row, so the last_value() never looks beyond current row unless you change the frame.

From MSDN:


  If ORDER BY is not specified entire partition is used for a window
  frame. This applies only to functions that do not require ORDER BY
  clause. If ROWS/RANGE is not specified but ORDER BY is specified,
  RANGE UNBOUNDED PRECEDING AND CURRENT ROW is used as default for
  window frame. This applies only to functions that have can accept
  optional ROWS/RANGE specification. For example, ranking functions
  cannot accept ROWS/RANGE, therefore this window frame is not applied
  even though ORDER BY is present and ROWS/RANGE is not.


Since last_value() has an optional order by clause, its default window frame ends at the current row.  So with the default frame, no matter which partition or ordering you choose, last_value() returns the value from the current row.