You are at the mercy of Unity unloading and loading things at the appropriate times using the default behaviour. The easiest way to do this is and have full control over everything is -
1. One or more sprite collections for the base shared sprites. One SpriteAnimation for all these animations.
2. All the "Screen" specific data is in its own sprite collection each. Create a SpriteAnimation specific to each "screen", give it a unique name and put it in a "Resources" directory. Just the SpriteAnimation and nothing else. One or more animations in each of these.
3. When switching to these screens, load the SpriteAnimation using Resources.Load, and create your animated sprite. Creating a sprite is best, as you can simply destroy it to ensure all references are destroyed. Make sure you don't save a reference to the SpriteAnimation. The only one who actually contains a reference to it is the animated sprite.
4. Destroy the sprite and call Resources.UnloadUnusedAssets and you should unload all references.
Note: Creating a new sprite is easier for this reason: When you play an animation, and the animation stops, the material assigned to the sprite will still be the last frame it played. Which in this case, will be the material from the "screen" sprite collection. You have to make sure there are no lingering references before unloading.