Hey Ross,
You can use a "Lead is Created, Source is Web Service API" with a "Data Value Changes, Source is Web Service API." This would pick up both newly created and existing leads. To make sure the DVC always triggers, you should use a dummy field that you fill with the syncLead call, and empty with a Change Data Value in the campaign. You could also optionally use a requestCampaign call after the syncLead call, but you introduce a little more overhead that way.