Non avendo ricevuto risposta, io c'ho provato a modo mio...temo non sia la soluzione migliore, quindi, se qualcuno avesse voglia di darmi qualche dritta...ben venga:

codice:
'********************* PREPARAZIONE DEI DATI *********************
        Dim MyPrimaryKey(0) As DataColumn
        Dim dt1 As New DataTable
        Dim dt2 As New DataTable
        Dim dt3 As New DataTable
        Dim a As Integer = 0

        'Creo due DataTable identici con gli stessi dati
        dt1.Columns.Add("ID", Type.GetType("System.Int32"))
        dt1.Columns.Add("NAME", Type.GetType("System.String"))
        dt2.Columns.Add("ID", Type.GetType("System.Int32"))
        dt2.Columns.Add("NAME", Type.GetType("System.String"))
        For i As Integer = 0 To 2
            dt1.NewRow()
            dt2.NewRow()
            dt1.Rows.Add(New Object() {i, "NAME" & i})
            dt2.Rows.Add(New Object() {i, "NAME" & i})
        Next
        'Imposto il PrimaryKey per entrambi i DataTable
        MyPrimaryKey(0) = dt1.Columns("ID")
        dt1.PrimaryKey = MyPrimaryKey
        MyPrimaryKey(0) = dt2.Columns("ID")
        dt2.PrimaryKey = MyPrimaryKey
        dt1.AcceptChanges()
        dt2.AcceptChanges()
        'Simulo delle modifiche (esterne) al Database, rappresentate dal Datatable dt2
        '(modifico la riga 2, elimino la riga 3 ed aggiungo una riga)
        dt2.Rows(1).Item(1) = 10
        dt2.Rows(2).Delete()
        dt2.NewRow()
        dt2.Rows.Add(New Object() {3, "PROVA"})
        dt2.AcceptChanges()
'******************* FINE PREPARAZIONE DEI DATI ******************
 
        'In un nuovo DataTable dt3, "mischio" i dati contenuti nel vecchio DataTable dt1 con quelli del
        'nuovo DataTable dt2. Il Merge, non elimina dalla tabella di destinazione le righe mancanti
        'dalla tabella di origine, ma non fa altro che aggiungere le righe aggiunte e modificare le righe
        'esistenti
        dt3 = dt1.Copy
        dt3.Merge(dt2)
        dt3.AcceptChanges()

        'Ciclo sul nuovo datatable aggiornato
        For Each dr As DataRow In dt3.Rows
            'Cerco nel vecchio datatable...
            Dim drV As DataRow = dt1.Rows.Find(dr(0))
            If drV Is Nothing Then
                '...se non lo trovo, la riga è stata aggiunta
                dr.SetAdded()
            Else
                '...altrimenti, cerco nel nuovo DataTable...
                Dim drN As DataRow = dt2.Rows.Find(dr(0))
                If drN Is Nothing Then
                    '...se la riga non è stata trovata, è stata eliminata
                    dr.Delete()
                Else
                    '...altrimenti, verifico se è stata modificata...
                    Dim comparer As IEqualityComparer(Of DataRow) = DataRowComparer.Default
                    Dim bEqual As Boolean = comparer.Equals(drN, drV)
                    If Not bEqual Then dr.SetModified()
                End If
            End If
        Next

'Tramite GetChanges ottengo solo le righe eliminate/modificate/aggiunte per le quali, la proprietà
'"RowState" mi dice se la riga è stata eliminata/modificata/aggiunta
        dt3 = dt3.GetChanges