I narrowed the problem down to a critical line in each of the Equipped and Unequipped listener functions. I specified them in the repro. The two lines move a GUI inside the tool to PlayerGui and back respectively. This is causing the Equipped and Unequipped events to be fired twice.