I'm traveling at the moment, so I don't have much time to dig into this but I figured I'd mention a few quick things:
You've got a collapsing margin issue with your pin, so I'd recommend using padding instead if you can. Basically, if your pinned element has a margin-top and it gets enclosed in the pin, that margin-top will push it down from the pin-container. It's not a bug - it's a logic issue with the way CSS works.
You should always create your ScrollTriggers in the order they occur on the page so that they refresh() in the proper order. Alternatively, you can influence that with the refreshPriority. In your case, you want your back-next element to have the lowest priority (default is 0, so go negative).
You were creating new tween instances in your onEnter/onLeaveBack, so those can't get reverted on refresh so I'd recommend doing a regular gsap.to() with a ScrollTrigger and then define toggleActions: "play none none reverse".
Is this closer to what you wanted?
https://codepen.io/GreenSock/pen/KKqmGQx?editors=0010