Hi Evan,
Thanks for the suggestions. Session Variables work great but the transaction number and OrderID are always zero in this event so I have nothing to test against. Even if you set something in the Transaction itself such as the Reference Number or type of transaction, this is cleared on the second fire. It appears as if the first Transaction is simply thrown away. It must be a bug.
I've split my code across two hooks now. I set the default transaction type to Work Order if it hasn't been set already in the InitalizeTransaction event. It doesn't really matter that this happens twice.
My custom form for entering the Customer Order Number, which I store in the ReferenceNumber field is only displayed if it hasn't been set when the Begin Tender hook fires. The original problem was this custom form would be displayed twice.
I realise you can display the Details form automatically but it wasn't quite what I wanted as I specifically wanted the field to be labelled Customer Order Number.
Thanks again for your help. This workaround will be OK. I guess I just wanted to make sure the double firing wasn't something messed up with my installation or the Retail Realm addins.