I believe the actual bug must be in Tk::Trace which is used by Tk::ProgressBar.
I looked at the source code of Tk::ProgressBar itself but as far as I can tell there is nothing that could cause this memory corruption.
The problem seems to be triggered by the fact that the same variable is traced both from a -textvariable in a Label and from Tk::ProgressBar.
If I understand correctly, Tk::Trace works by tying the scalar using Tie::Watch. Could the problem be a result of "stacking" Tie::Watch on the same value?