For anyone looking for an example here's what I ended up with:
First construct the where portion of the subquery:
Dim filter As IPredicateExpression = New PredicateExpression
filter.Add(PredicateFactory.CompareNull(ActivityFieldIndex.ActualDate))
filter.Add(PredicateFactory.CompareExpression(ActivityFieldIndex.CdfId, _
ComparisonOperator.Equal, _
New Expression(EntityFieldFactory.Create(CdfLineFieldIndex.Id))))
Then add that to the FieldCompareSetPredicate:
filterBucket.PredicateExpression.Add(New FieldCompareSetPredicate( _
Nothing, Nothing, _
EntityFieldFactory.Create(ActivityFieldIndex.CdfId), Nothing, _
SetOperator.Exist, _
filter))
In my example activity is what I'm checking the existence of (the subquery) which is being correlated to cdf outside of the query