Did you change the PlayerJoins script when changing from the vars to looping method? Or does it remain unchanged regardless of which method you use?
If you change this notify:
Notify [[Sell] Bolts received.] [local] [0,0,0]
Notify [[Sell] Bolts received. You now have [history:bolts] Bolts.] [local] [0,0,0]
Does the 'you now have x bolts' part of the notification always show the correct quantity?
If it does, then the history has the correct quantity and the problem is with the history, not vars.