Yes, your timers are the whole problem.
on *:TEXT:!r*:#:{
if ($me == %bot) && ($2 isnum) && ($3 == d6) {
var %i = 1
while (%i <= $2) {
var %outcome = %outcome $rand(1,6)
inc %i
}
msg $chan %outcome
}
}
You don't need your $$ in this case since you explicitly state they need to be a certain value.
By the way, as described in the help file, you can always break out of infinite loops by pressing Ctrl+Break/Pause