In order to use SetUserPlaced(true) you have to call WatchFrame:SetMovable(true). To sum it up:
OnLoad script:
Code:
self:RegisterEvent("PLAYER_ENTERING_WORLD")
OnEvent script:
Code:
WatchFrame:SetMovable(true)
WatchFrame:SetUserPlaced(true)
WatchFrame:SetPoint("TOPRIGHT", Minimap, "BOTTOMLEFT", 50, -20)
You don't have to call ClearAllPoints() as long as you use "TOPRIGHT" as your anchor point, because that's the only anchor point used by Blizzard to position the WatchFrame and the SetPoint call overwrites it.