Thanks Scott - that's what we feared. For anyone's reference, the unsupported mechanism that seems to work is to run the below SQL statement (we only used 3 entities, namely lead, opportunity and new_customentity):
INSERT INTO BusinessProcessFlowInstance
(BusinessProcessFlowInstanceId,Entity1Id,Entity1ObjectTypeCode,Entity2Id,Entity2ObjectTypeCode,Entity3Id,Entity3ObjectTypeCode,ProcessId,ProcessStageId)
SELECT NEWID() AS BusinessProcessFlowInstanceId
, L.leadid AS Entity1Id
, 4 AS Entity1ObjectTypeCode
, O.opportunityid AS Entity2Id
, 3 AS Entity2ObjectTypeCode
, P.new_customentitid AS Entity3Id
, <ObjectTypeCodeOfCustomEntity> AS Entity3ObjectTypeCode
, COALESCE(P.processid, O.processid, L.processid) As ProcessId
, COALESCE(P.stageid, O.stageid, L.stageid) AS ProcessStageId
FROM FilteredLead AS L
LEFT JOIN FilteredOpportunity AS O
ON L.qualifyingopportunityid = O.opportunityid
LEFT JOIN Filterednew_customentity AS P
ON O.new_customentityid = P.new_customentityid --This link existed in our customisations, you will have to find your own way to link your Opportunity to your new_customentity
LEFT JOIN BusinessProcessFlowInstance PF
ON Entity1Id = L.leadid
WHERE PF.BusinessProcessFlowInstanceId IS NULL
AND COALESCE(P.processid, O.processid, L.processid) IS NOT NULL
Hope this helps someone!
Thanks
James