Я бы использовал fatal, если бы моим следующим шагом было прекращение работы приложения или просто не выполнять дальнейшую работу. Если приложение является частью пакета или запущено несколько процессов, это может быть полезно для отслеживания произошедшего.
Если есть вероятность восстановления (например, потеря сетевого соединения с повторными попытками на некоторое время), я бы не использовал фатальный.
Если у меня есть несколько служебных потоков, активированных основным потоком, и один из них выходит из строя из-за неправильного ввода, но приложение все еще может обслуживать новые запросы, я не считаю это фатальным.