если по-простому:
file_exist нужен для проверки что указанный путь/файл вообще существует, и не важно файл это или директория.
is_file нужен, если нам нужно удостовериться, что мы имеем дело именно с файлом, а не директорией.
примеры из жизни:
мы запрашиваем config.ini - априори имеем дело с файлом и достаточно просто проверки его существования (file_exists).
мы делаем обход директории - если это файл (is_file) просто выводим, если это не файл - новый виток рекурсии.
это упрощённо, но смысл должен быть понятен.