The local reading of the preposition does its job for more verbs than one would think at first. Some of your examples illustrate that:
Weihnachten fällt auf....
It is falling and lands on one day, thus "movement" thus Accusative.
Niemand steht über dem Gesetz.
No one stands above the law. Standing is a pretty stationary action so there is semantically no movement involved in what dimension whatsoever, thus Dative.
Sure, there are examples where it is arguable. For those cases, Accusative is usually the more likely pick since the Dative is VERY strong it its local content.
Ich spreche über dem Weltfrieden.
Ich warte auf dem Bus.
Warten for the bus is super stationary as an activity but the location is but stop and not bus. The Dative on the other hand tells us that bus is the location in which we perform the action waiting. So, it is not wrong but it is literal.
Same for sprechen. It is arguable whether or not Accusative or Dative makes more sense here, but the way German native speakers understand Dative is as a literal indication of location. So the sentence with Dative would mean
I am waiting atop world peace.
Not wrong, just weird.
To also talk about one example from Toschos answer:
Wir fahren über den Rhein.
There is also a version with auf and that one takes Dative to convey the same meaning
Wir fahren auf dem Rhein.
So it is kind of random but über with fahren often implies traversal über die Brücke, über die Strasse... etc... auf on the contrary usually takes Dative in context of generic fahren. Hence, for über the Accusative is the more normal version and a Dative would add significant meaning (that you are STATIONARY above Rhein). Same for auf. The Dative is the default and Accusative adds extra meaning (from something onto that other thing).
So... here's my 3-step-program to pick the right case:
1) Check if the movement-idea makes some sense on an abstract level
if inconclusive
2) Check, what would be the more natural thing with the specific verb-preposition-combination (destination vs. fixed location)
if inconclusive
3) use Accusative
if wrong
4) make note to self with exception