Efectivamente:
Si cambias la fecha de forma manual se dispara el evento cada pulsación en día o en mes y al terminar de poner el año. Esto parece lógico ya que la fecha ha tenido todos esos "Change". Cuando cambias la fecha desde el calendario o desde código, el evento se dispara siempre dos veces. Esto no es razonable, ya que solo ha habido un cambio en la fecha. He realizado un programa de prueba con un DateBox y un Button y he hecho las comprobaciones.
Solución:
He puesto una variable testigo, de tal forma que cuando el evento se dispara, si la fecha es la misma que la anterior, se sale del procedimiento sin hacer nada.
Public Sub dtxFecha_Change()
If $dTestigoFecha = dtxFecha.Value Then Return
$dTestigoFecha = dtxFecha.Value
..
..