I have fixed this myself.
Here is the solution in Boo (you will need to extract the field defintion yourself from a working example):
import System
import Microsoft.SharePoint
import Microsoft.SharePoint.Portal
import Microsoft.SharePoint.Portal.WebControls
import Microsoft.Office.Server
import Microsoft.Office.Server.ApplicationRegistry.Infrastructure
SqlSessionProvider.Instance().SetSharedResourceProviderToUse("My SSP Name")
site = SPSite("http://mysharepointsite:12345")
web = site.OpenWeb()
list = web.Lists["My list Name"]
fieldContent = .... field defintion with id replaced with new guid and sourceId replaced by list.Id
fieldName = list.Fields.AddFieldAsXml(fieldContent)
list.Update()
busfield as BusinessDataField = list.Fields[fieldName]
busfield.SystemInstanceName = "My system instance"
busfield.EntityName = "scope.Entity"
busfield.BdcFieldName = "MyFieldName"
busfield.Profile = .... (copy from source field)
busfield.HasActions = true
busfield.Update()