Helper lifecycle processing is not currently being performed in all expected cases. Some uninstall events are being missed. This is because of two reasons:most notably failure to correlate injection of a rule into a specific class+method with uninstall or reinstall of the associated rule script; secondly, failure to correctly handle failed injections.
A related problem is that helper lifecycle processing needs to execute lifecycle methods wherever they are defined in the helper hierarchy. Calls to activated and installed lifecycle methods need to be chained recursively up the helper super chain, starting from the top down to the bottom. Conversely, calls to deactivated and uninstall lifecycle methods need to be chained up the helper super chain, starting from the bottom up to the top. This ensures installed rules whose helper inherit from a parent (e.g. the default helper) are also counted as installed at the parent level. This avoids the parent helper being deactivated if all rules directly employing it as a helper are uninstalled while a rule is still installed relative to the subclass helper.
Fixing this issue is a precursor to a related feature request which is to modify the default helper deactivated lifecycle method so that it clears static resources used to record rule state.