I think the reason is line 67 with the if statement. That is probably causing it to fire again. That is a tough one then. I am not sure if once() will help there as it may not calc in the correct order. Other idea is to add calculationMode=whenEmpty to line 67 or a manual on that line also is worth a test. Since it is a calculate type I am not sure what manual does in that situation.
Sorry all the ideas I have but you can test them.