One way this can happen...(but may not be what you are seeing)
See if you have two rows in ##GlobalTable with the same value for InitialAmount but different values for Difference.
If so, then a row in some_table may match both (or more) rows in ##GlobalTable, and SQLServer makes no guarantee what answer you will get.
In my experience SQLServer will choose a row to use in the update and it is usually the last qualifying row retrieved from ##GlobalTable based on the execution plan. Since the execution plan is subject to change as table contents change the result is not so predicable, and not something to count on when writing code.
Unless you know that each row in ##GlobalTable has a unique value for InitialAmount, you should choose a more reliable way to join some_table with ##GlobalTable.