Updates on allpages-locked heap tables can be performed in several ways:
If the length of the row does not change, the updated row replaces the existing row, and no data moves on the page.
If the length of the row changes, and there is enough free space on the page, the row remains in the same place on the page, but other rows move up or down to keep the rows contiguous on the page.
The row offset pointers at the end of the page are adjusted to point to the changed row locations.
If the row does not fit on the page, the row is deleted from its current page, and the “new” row is inserted on the last page of the table.
This type of update can cause a conflict on the last page of the heap, just as inserts do. If there are any nonclustered indexes on the table, all index references to the row need to be updated.