It's many factors for me but the most prominent cause seems to be the shape of the caseback and the amount of contact the back has with the flat of my wrist.
For example my old Rolex Seadweller 16600 always rotated as the relatively small amount of caseback and it's depth made little contact compared to the weight of the watch head. By contrast my Helson Sharkdiver 2000 is much heavier with a much thicker casebackbut it has much more contact with my wrist and stays put.
My most comfortable "heavy" watch is my Rolex 116718 GMT which is just about perfect. I can definately feel it on my wrist but it stays centered with just the right amount of tightness due to the easy-link adjustments due to natural wrist swelling when flying or in hot weather..
I've been gravitating to wearing much smaller watches as I much prefer the comfort and you can't usually even tell you're wearing a watch. I'm now confident and comfortable wearing sub 36mm watches as my everyday wearer.
Lug placement also remains a factor for me. Lugs that stand proud of the wrist curvature also seem to produce watch rotation., especially in anything over about 37mm diameter.
There's no way I'll spend big money now on a large 42mm+ watch as I just know I won't wear it enough to self-justify the purchase.
For my wrist size of just over 7 inches depending on how my diet is going I believe that Patek's collection really nails the watch size to comfort ratio but I am envious of those of us who can comfortably wear the bigger statements exes.