Why I do think it's possibly a bug: Applying scaleX() alone in the tween does not cause the upside down behaviour, it only happens if you use scale() or scaleY().
Manually adjusting the generated matrix value via console 'fixes' the 'problem' (until you scroll of course). Adding in scaleY() to the css has no effect on the generated matrix. Using matrix(-1, 0, 0, 1, 0, 0) in css instead of scaleX(-1) also has no effect on the generated tween matrix, which ends up having both X&Y values negative as per before, eg, matrix(-1, 0, 0, -1, 0, 0).
Using TweenMax.set(element, {scaleX:"-1"}) also fails in a similar way, but slightly worse - now my image reverts to being rather fat looking...
I ended up using different logic to scale my image - manipulating width&height instead of using scale - obviously this is not a very dynamic solution but it's the ONLY thing I could get to work with my css-flipped image.
yep, yep, here is the codepen:
(NB: Pasting a codepen URL in the middle of my post, autoloaded the preview & deleted all the text after the pen!)
EDIT update (not shown in pen):
Using transform:rotateY(180deg) in the css just removes the X axis from the equation - it still has unwanted flip.
Removing the css flip and directly using set() to flip, causes the same unflip as per using rotateY() when scrolling.
EVERYthing else I have tried gives the same result as shown in the pen.