O que você realmente deseja fazer é ver se há um código clonado (copiado) nos dois projetos (ambos os projetos consistindo em conjuntos de arquivos possivelmente grandes). Você pode fazer isso executando uma ferramenta de detecção de clones. A Wikipedia lista uma variedade deles.
Para decidir grosseiramente se há muitas cópias, você só precisa corresponder às linhas de origem e há uma variedade exata de detectores de clones de linha de origem por aí. Eu acredito que o PMD é um deles. O que isso não fará é encontrar o código que é copiado, colado e editado; eles encontrarão o código copiado e colado inalterado provavelmente contido no material copiado e editado.
Se você quiser ver os detalhes da cópia do código de copiar e editar, precisará de um detector de clone que encontre clones "parametrizados". Os detectores baseados em token fazem isso para edições que substituem apenas nomes ou constantes de variáveis.
Os detectores baseados em árvore de sintaxe abstrata (AST) fazem isso para edições que envolvem blocos maiores, como expressões, instruções, inserções, exclusões, etc. Esses últimos tendem a dar melhores respostas, porque, diferentemente dos detectores de token, eles podem usar a estrutura de linguagem do código-fonte do computador como um guia.
Nossa ferramenta CloneDR é um detector.
Não conheço ferramentas que realmente encontrem código "equivalente" (condicionais invertidos) etc. Os pesquisadores criaram detectores de clone que fazem algo parecido com isto, mas a combinatória torna isso muito caro para executar e os protótipos da pesquisa foram mal dimensionados.