Your fade_pan_out continues to run even after you destroyed the panel. When you create your second panel, it mostly gets the pointer that was formerly used for the first panel.
The solution would be either putting the ptr_remove to the end of fade_pan_out, using wait_for(fade_pan_out) before the ptr_remove or proc_kill(fade_pan_out) after the ptr_remove.