After some checks I realized that if a duplicate is made with createCopy() or duplicateIfShared() (and it’s shared) the transformations applied to the original image context are not maintained. If I use the copy constructor or the operator=() no duplicate is created (it just shares the pixel data, as you said) so these transformations are maintained. Shouldn’t the duplicates also maintain these transformations?
The transformations are handled and stored in the Graphics object, not the Image itself.
Think of the Graphics as a plotter, and the Image is the sheet of paper it is drawing onto.