Parece que a interceptação ERR é executada porque a função FuncA tem um status de saída diferente de zero. Conforme documentado em man bash
the exit status of a function is the exit status of the last command executed in the body.
Qual, nesse caso, foi o [[ -d mydir2 ]] . Você pode adicionar um true como o último comando na função para impedi-lo.
A construção if é diferente porque (mesmo manual):
The exit status is the exit status of the last command executed, or zero if no condition tested true.
Eu recomendaria usar if em vez de adicionar true .