Parece que você não quer manter todo o DataTable como uma cópia, porque você só precisa de algumas linhas, certo? Se você tem uma creteria que pode especificar com um select na tabela, você pode copiar apenas essas linhas para um array de backup extra de DataRow como
DataRow[] rows = sourceTable.Select("searchColumn = value");
A função .Select () tem várias opções e esta, por exemplo, pode ser lida como um SQL
SELECT * FROM sourceTable WHERE searchColumn = value;
Em seguida, você pode importar as linhas desejadas conforme descrito acima.
targetTable.ImportRows(rows[n])
... para qualquer n válido que desejar, mas as colunas precisam ser as mesmas em cada tabela.
Algumas coisas que você deve saber sobre ImportRow é que haverá erros durante o tempo de execução ao usar chaves primárias!
Primeiro, queria verificar se já existia uma linha que também falhou devido à falta de uma chave primária, mas a verificação sempre falhou. No final, decidi limpar as linhas existentes completamente e importar as linhas que queria novamente.
A segunda questão ajudou a entender o que acontece. A forma como estou usando a função de importação é para duplicar linhas com uma entrada trocada em uma coluna. Percebi que sempre mudou e ainda era uma referência à linha na matriz. Primeiro, tive que importar o original e, em seguida, alterar a entrada desejada.
A referência também explica os erros de chave primária que apareceram quando tentei importar a linha pela primeira vez, pois ela realmente estava dobrada.