I figured it out. The signiture of the predicate i was compiling was wrong. I was doing;
public function DynamicPredicate(of t as TheType)(item as TheType) as boolean
Whereas what I wanted was;
public function DynamicPredicate(item as TheType) as boolean
And now it works.