Chiamo più saveChanges() perchè ho necessità di recuperare l'ID del nuovo record inserito nella tabella "padre" in modo da collegare i nuovi record della tabella figlio con la F.Key.

L'errore comunque era qui:
codice:
For i = 0 To rate - 1
                With mov
                    .data_Mov = dataMov.AddMonths(freq)
                    .effettuato_Mov = effettuatoMov
                    .idInOut_Mov = inOut.id_InOut
                End With
                myDB.movimenti.Add(mov)
            Next
Mi sono accorta dopo che stavo inserendo lo stesso movimento più volte alchè ho corretto così:

codice:
    For i = 0 To rate - 1
                Dim newMov As New movimenti
                With newMov
                    .data_Mov = dataMov.AddMonths(freq)
                    .effettuato_Mov = effettuatoMov
                    .idInOut_Mov = inOut.id_InOut
                End With
                myDB.movimenti.Add(newMov)
            Next
Ed ora funziona!
In compenso mi sta dando lo stesso identico errore quando provo ad eseguire un semplicissimo "removeRange" (o anche remove multiplo con ciclo for) e non riesco a capire perchè...se volete vi posto qui i dettagli (o apro un altro thread?).

Per la cronaca:

If idMov > 0 Then mov = myDB.movimenti.Where(Function(m) m.id_Mov = idMov).Single
End If
// ...
Questo codice serve perchè uso lo stesso form sia per aggiungere che modificare e in caso di modifica carico i dati del record da modificare (ma anche questo era sbagliato e l'ho corretto).
Essendo "mov" un set di record "figli" nel momento in cui modifico il padre li elimino tutti e riscrivo i nuovi in base ai dati inseriti nell'interfaccia dall'utente. Ma questa è un'altra storia!