Curious.... InfoPath validation events seem to trigger before the form has finished loading when you first try to access the form, which is kinda irritating as it slows down form load.
The only way that I can think of getting around this is to change the XML schema so that there is a new field which gets set to hold the value "true" when the form has completed loading and then test this field in every validation event. (a private variable could not be used as they do not hold their value between post-backs when using Forms Services)

This seems a very backwards approach to validation and I cannot see any use for this. Why would you ever want to validate a form before a user has had a chance to type anything in?

After progressing down this route, my idea does seem to work. But the thing that does not work is my debugging of my validating event, which has revealed to me that it is impossible to set field values within such an event function.... Annoying, but I will work round it by just using breakpoints.

To continue, it would also seem that my validating event which uses an HttpWebResponse object to communicate with Biztalk is painfully slow, having used my breakpoints now, it would seem that the event is executed twice every time it is called, the first time through it all runs quite happily within 4 to 8 seconds, a bit slow but at least bearable and probably due to our faked backend database that Biztalk is querying. The 2nd time through it takes somewhere in the region of 40 seconds which is ridiculous. The slow code is as follows :

            //send the request
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();

//get the response
StreamReader streamResponse = new StreamReader(httpResponse.GetResponseStream());
This is most odd and I cannot work out why InfoPath is executing the event twice, when I follow the code through in the debugger it jumps from the end of the event function straight back to the beginning without going anywhere else. For now I will put in some checks to ensure that it does not execute more than once, I hope this will be fixed in B2TR. Time for another frown to go to MS.

One last addition for today is that although I thought it executed twice every time, in fact it only does this the first time a user makes a change to a field, after that it will execute the validating event only once. Causing me more confusion with my code that tries to fix it up.......

It is also worth noting that the Changed event is also executed twice such that the event flow is as follows : user changes value --> Validating Event Fired --> Changed Event Fired --> Validating Event Fired --> Changed Event Fired.

Again, this only happens on the first actual user change, thereafter it is only executed once, although in the same order as above.