Oggi mi sono accorto di questa cosa. Se attacco un event handler ad una document library con il versioning e le funzionalità di check-in e check-out attive, l'evento ItemUpdating viene scatenato 2 volte !
Nelle pagine di supporto Microsoft, viene segnalato l'errore e viene data una soluzione che riguarda solamente però il caso in cui il documento venga messo in check-in o in check-out; l'help è visualizzabile a questo indirizzo: http://support.microsoft.com/kb/939307.
Mentre invece, se vogliamo eseguire delle operazioni solamente una volta, dobbiamo controllare che ci siano delle BeforeProperties valorizzate !

public override void ItemUpdating(SPItemEventProperties properties)

{
this.DisableEventFiring();
WriteLog("Start ItemUpdating");
bool go = false;

foreach (DictionaryEntry de in properties.BeforeProperties)
{
go = true;
WriteLog(String.Format("{0} - {1}", de.Key, de.Value));
}

if(go)
{
//do something only for one time ! }

this.EnableEventFiring();
}

Magari non è il massimo della bellezza.. ma funziona !