"self changed" will invalidate the entire morph area.
"self invalidRect: rect" will only invalid the specified rectangle.
For the second question I'm not entirely sure that's true?
For historic reasons Morphic uses global coords even though most other rendering frameworks use parent-relative coordinates (I think Cuis may have fixed that, not sure).
If I write a morph that always draws starting at 0@0 then it's always drawn in the top-left screen corner (though it might not be visible there unless that area gets invalidated).
However – the HandMorph paints its submorphs into a caching canvas, so they don't have to be redrawn for every mouse move. If you never invalidate your morph then it is only drawn once into that canvas and then it looks like it's being dragged around. But if the morph updates, e.g. you call "self changed" in your drawOn: method (don't do that! only for testing) then you will see that even while being dragged in the hand, it will always be drawn in the top-left screen corner.
On the other hand (pun intended), if you are using OpenGL (are you?) then it's not actually drawn into the world but the 3D window is an overlay that gets moved around, and the 3D content would move with that window even though it is drawn relative to 0@0.
HTH,
Vanessa