SQL Query :Is it possible to count / group based on date with a sum over the group
In my opinion window functions will be the cleanest way to accomplish this (you didn't specify your version, so I'm assuming you're using 2012 or later).

WITH Progress AS
(
SELECT [Order], State,
  SUM(Count) AS ItemsProgressedToThisState,
  LEAD(SUM(Count), 1, 0) OVER (PARTITION BY [Order] ORDER BY State) AS ItemsProgressedPastThisState
FROM OrderItemState
GROUP BY [Order], State
)
SELECT [Order], State, ItemsProgressedToThisState - ItemsProgressedPastThisState AS [Count]
FROM Progress
ORDER BY [Order], State


The CTE isn't really necessary, you can subtract the SUM and LEAD directly. I just wanted to make the logic clear: count the number of items that have reached the current state, and then subtract the number of items that have reached the next state.