Here are two use cases where I call `isearch-forward` with some filter predicate.

    (let ((isearch-filter-predicate (lambda (a b) nil)))
      (funcall 'isearch-forward))

    (let ((isearch-filter-predicate (lambda (a b) nil)))
      (call-interactively 'isearch-forward))

Why is it that only the first one works?  Is there a way to have the `call-interactively` call take `isearch-filter-predicate` into account?

It seems I need `call-interactively` if I want commands that leave isearch (e.g., `C-n`) to be executed properly (that is, `C-s C-n` should go to the next line).