Opa, boa noite, eu fiz uma função aqui de verificar duplicados e coloquei, aproveitei e coloquei no componente uma mensagem diferente pra facilitar a visualização do teste, acho que tá tudo ok, da uma olhada no código

Segue o fork que fiz do teu codesandbox codesandbox

Olha se era isso o plano

const dataTableValidate = () => {
    const newData = dataSource.map((data, index) => {
      const isValisCPF = cpf.isValid(data.CPF);
      const isValidCNPJ = cnpj.isValid(data.CNPJ);

      //Funções adicionadas pra testar a duplicidade de CPF
      const isDuplicatedCPF = dataSource.some((d) => {
        //if pra evitar que o teste seja feito no mesmo objeto
        if (d.key === data.key) {
          return false
        }
        return d.CPF === data.CPF;
      });
      const isDuplicatedCNPJ = dataSource.some((d) => {
        if (d.key === data.key) {
          return false
        }
        return d.CNPJ === data.CNPJ;
      });

      //Aqui eu fui concatenando as mensagens de erro pra enviar no componente
      let message = isValisCPF ? "" : "CPF Inválido";
      message = isValidCNPJ ? message + "" : message + "CNPJ Inválido";
      message = isDuplicatedCPF ? message + "CPF Duplicado" : message + "";
      message = isDuplicatedCNPJ ? message + "CNPJ Duplicado" : message + "";

      //Aqui faz apenas um teste geral para caso algum teste anterior tenha retornado erro
      // é salvo o componente TableError e a mensagem de erro concatenada
      let messageError =
        !isValisCPF || !isValidCNPJ || isDuplicatedCPF || isDuplicatedCNPJ 
        ? 
          (<TableError messageError={message} />) 
        : 
          ("");
      return { ...data, situacao: messageError };
    });
    setDataSource(newData);
  };

Muito obrigado RafaelRNF, sua idéia me iluminou aqui.