Если вызываемый объект генерирует необработанное исключение, поведение не определено. Для прерванного исключения в останавливает ExecutorService, например. Кроме того, поскольку incokeAll принимает коллекцию, создайте HashSet из вашего ArrayList и передайте его, чтобы убедиться, что у вас ничего не продублировано
Set<?> set = new HashSet<?>(jobPool);
Я почти уверен, что ExecutorService не просто дважды вызывает один и тот же Callable.