Lummox JR stated:
The reason you're seeing this is that proc data has an internal "hard" list: an array of values. That list is used for loops, and it receives a copy of the list you're looping through. The hard list doesn't get cleared after the loop ends. Instead, it's simply overwritten if a new loop starts. (For nested loops, there are instructions that handle this so that the hard list in the outer loop is preserved until it's needed again.) The memory is cleared when the proc completely ends, but it will not clear in the event of a sleep or spawn because it gets copied. One silly but effective way to work around this is to throw in another for(a in b) loop that loops through a blank list.
The workaround mentioned above does not work. Tested at least 15 times. The only thing that does work is allowing the function to finalize. This is not feasible in my case.