Non ho approfondito il problema, ma forse è possibile ipotizzare che la copia della libreria System.Data.dll venga effettuata per poter accedere ai tipi utilizzati dal "DataSet tipizzato" e concludere correttamente la compilazione.

E' possibile che la DLL abbia l'impostazione "Copia in locale" (Copy Local) impostata a True, per cui viene copiata nella cartella dell'applicazione quando si tenta di compilare quest'ultima.

Eventualmente, prova a fare qualche verifica in proposito; se non c'è verso di chiarire il motivo, vedremo di fare ulteriori considerazioni in seguito.

Ciao!