Agreed, calculations are not ideal for sunrise/sunset. As we all know, a cloudy day will actually get dark sooner than a clear day. What we really want is for the lights to come on and turn off based on the actual ambient lighting rather than where the sun is relative to the site's location. However, I decided that trying to use signals from the PR511 or MS16A or whatnot were too problematic for the very reason you stated. Passing clouds at noon could potentially trigger dusk and depending on the code that triggers off that signal, everything could be thrown for a loop.
IMO, a better approach to using either a calculation or using an X10 sensor would be to use a combination of time of day and a luminescence sensor. With an actual light level (not a trip point) and a time of day, one could more logically determine if lower light levels should be interpreted as dusk. I'm envisioning something on the lines of
If time is between (1 hour after sunrise*) and (1 hour before sunset*) and light level is high = day
If time is between (1 hour after sunset*) and (1 hour before sunrise*) and light level is low = night
If time is between [(sunrise*) and (1 hour before sunrise*)] or [(1 hour before sunset*) and (sunset*)] and light level is low = trigger night conditions
*calculated
Anyway, this can be done pretty easily in HG as well, but I don't have a luminescence sensor or the desire to mess with the potential fallout from the wife if my enhanced night detection breaks a bunch of stuff. Using a calculation is very good and the easiest solution to it getting dark early or light a bit late is simply to add an offset (which I do).