You are on the right track, but there are certainly a few things to fix.
1. Regarding the SubPageLink property - it is not so much about the type of the subpage (factbox or document lines), it rather depends on what kind of data is presented in the subpage. If you want to keep the location records in a temporary table and reset it on the main page update, then be it, you don't need SubPageLink.
2. The main problem is that page objects are not singletons. Every page variable in your code is a new instance of the page, unrelated to what is actually displayed in the main page. For this reason, ServiceItemWorksheetPage.Update does not do anything visible in the client. The right way to update the subpage in this case is via CurrPage."Item Quantities".Page. This way you are referring to the actual instance rendered in the client. All triggers in the page extension should call the update function in the factbox this way. And you can delete all local page variables, you don't need them.
3. The source table for the Item Quantities Factbox page is not actually temporary (I mean temporary as an in-memory table). Your code actually inserts records into a table that exists in the database. This is slower compared to in-memory operations, and also unsafe, because multiple users opening this page simultaneously will be deleting each other's records. This page will be a mess in concurrent sessions.
4. Looping on item ledger entries is not fastest way of calculating the sum. Use CalcSums("Remaining Quantity") or Item.CalcFields(Inventory), this will be way faster.