Più che soluzioni, questa mi sembra una vera anomalia.
Non sò come tu abbia testato il contenuto delle variabili, ed è quindi possibile che vi siano alcune differenze a livello di decimali, e se tu dici che sono uguali, questo potrebbe non essere proprio vero nei subdecimali.
Se la differenza si evidenzia sugli interi, il problema è che c'è un errore grossolano, altrimenti le differenze dovresti magari trovarle nelle cifre piccole, ad esempio:
DIM v1 AS Float = 1.0000000000000000000000000000000000000000000001
DIM v1 AS Float = 1.0000000000000000000000000000000000000000000002
In questo banale esempio, la differenza stà nella ennesima cifra decimale che, normalmente, viene ignorata per calcoli riferiti su valori monetari.
Un'altra cosa che mi può venire in mente è che è possibile che la cifra superi le dimensioni massime ammesse per un Float, e in questo caso il risultato può essere indefinito.
La conversione che hai fatto in String presumo sia stata effettuata su un valore di decimali definito e abbastanza piccolo (es. 6 decimali a norma bancaria). Se questo è vero, sicuramente il resto è stato giustamente troncato e perso, per cui la comparazione è risultata più idonea al tuo scopo.
Resto comunque dell'idea che vi sia un errore nel tuo codice, perchè diversamente la cosa la vedo alquanto brutta, perchè vorrebbe dire che esiste un problema serio nella gestione dei Float all'interno di Gambas.