It looks like the panel is still dropping zombies, but now when external plugins are removed normally. My guess is either you aren't ignoring SIGCHLD, or you're not reaping the zombie processes properly... I'm not sure if ignoring SIGCHLD is the right idea, though, since it may bring back the problem where abnormal panel termination will leave the plugins running =p. So I guess you just have to have a SIGCHLD handler that calls waitpid() on the plugin process if something's removed.
Ok, could you try now? I added a SIGCHLD handler.
Seems ok now.