Ho trovato l'inghippo ma non ne capisco il comportamento.
Sostanzialmente succede questo:
la funzione DLL richiamata dal software per leggere i dati da seriale, richiama a sua volta un'altra funzione presente sempre nella stessa DLL (è questa che effettivamente recupera i dati da seriale, la funzione chiamata dal software invece serve semplicemente per elaborare i dati recuperati e fare i dovuti controlli). Questa funzione che effettivamente recupera i dati da seriale, ritorna il risultato alla funzione chiamante tramite string, o almeno è quello che dovrebbe fare; infatti la prima volta che recupera i dati funziona perfettamente, la successiva invece non assegna i valori recuperati alla variabile di ritorno Result (e i dati sono stati recuperati al 100%) generando access violation (da debug la variabile Result contiene la dicitura 'Inaccessible value'). Perchè? Sono sicuro che il numero di caratteri prelevati da seriale non superano i 255 a disposizione delle string quindi non mi spiego il comportamento.