I think that I have got this resolved. It is really a combination of a number of issues.
Because of the nature of the control (will be included in a database that will be extended by other developers) I need to set the datasource for the custom control. So I use the DominoDocumentData binding on the top level custom control. This top level control in this case contains a tab table, I decided to create a new CC for each of the Tabs in the table as they will each contain a significant amount of data. So I created a ccGeneral, ccAccess, ccTechnical etc for each tab. I could allow the primary datasource to pass down to each of the ccGeneral etc but decided to keep them separate by binding a cc Property Definition on each of the sub controls ccGeneral/dsGeneral, ccAccess/dsAccess. On each of the tabs I bound the individual controls to the Tabs datasource using EL compositeData.dsGeneralTab['ACConditionToggle'] and setting the binding to be done on Page Load. I would assume that this is faster than leaving it as dynamic.
Next I have a cc that contains as series of controls that are used to set a value in a field on the main XPage document. So I created a ccPickNames that amounts other things contains an Extension Library Name Picker. The cc has a dsPickNames that gets bound back to the cc that contains it using the run time DominoDocumentData, because it will be used many different times and the names bound back to different document fields I pass the Property Definition bindToField. In the field that I want to bind back to the source document I use the EL binding to compositeData.dsPickNames[compositeData.bindToField] but it does not work if you set the binding to On Document Load, it must be dynamic.
I'm sure that there is a better way of doing this but this works. So after trolling the internet and getting a little information from a lot of different sources I think I'm ready to get on with the job of actually building the application. I might have to wait a bit until my head stops hurting :-)
Thanks To all
Bill