Após alguns testes, descobri que os blocos IF estão bem, eles não parecem alterar o nível de erro, mas o que estava bagunçando era o "% 2 == algo" - os tempos que estavam falhando, Não houve segundo parâmetro sendo passado para o arquivo em lotes. Portanto, não tenho certeza de como "testar" com segurança se existe algum parâmetro (ou seja, sem que seja possível errar 0xff quando ele não estiver lá), exceto talvez para ter outro IF ERRORLEVEL depois disso. Mas, de qualquer forma, eu apenas mudei a tarefa agendada para que sempre tenha um segundo parâmetro (seja "algo" ou não) e parece retornar 0x0 como deveria agora.