Right - I've sorted my problem...
Xbox is put in to NTSC, and 480p enabled. Xbox then put back to PAL.
Following blunder code added to CApplication::Create, just after the GetModes() command:
// See if we can go to 480p - RH
BYTE currentCableMode = 0;
HalReadSMBusValue(0x20, 0x4, 0, (LPBYTE)¤tCableMode);
if((currentCableMode == 1)/*AV_PACK_HDTV*/ && g_videoConfig.HasPAL())
{
// We're in PAL mode, but connected to HDTV so switch to NTSC for 480p
char temp[1024];
helper.GetXbePath(temp);
char temp2[1024];
char temp3[2];
temp3[0] = temp[0]; temp3[1] = '\0';
helper.GetPartition((LPCSTR)temp3,temp2);
CStdString strTemp(temp+2);
int iLastSlash = strTemp.rfind('\\');
strcat(temp2,strTemp.substr(0,iLastSlash).c_str());
Destroy();
CUtil::LaunchXbe(temp2,("D:\\"+strTemp.substr(iLastSlash+1)).c_str(),NULL,VIDEO_NTSCM,COUNTRY_USA);
}
Basically, each time xbmc starts, it check to see if the HD component lead is connected (or in my case, the switch on the HD / Scart box) and if so, quits and re-runs itself in NTSC.
Must admit that XBMC looks a lot better in 480p (my projectors native resolution) than normal PAL.
Big thanks to the XBMC guys for making the thing compile 1st first time, and actually documenting the code