predicate? is not visible to find-last-helper. The way to fix that would be to move the definition of find-last-helper inside find-last's lambda block or to add an extra parameter to find-last-helper so that predicate? can be passed to it.
I would recommend the former; assuming (from the name) that find-last-helper is only useful to find-last, it keeps the outer environment cleaner.
Note: assuming you fix the errors but keep the basic structure, your function is going to return the leftmost match - the first match it finds - rather than the rightmost. To see this clearly, assume that the leftmost item in the list satisfies the predicate and step through your code; it should be clear that the third, recursive cond line is not executed.