TField.Value ist ein Variant. Und wenn man AsX (X sei der Typ des Felds, also string, Integer o.Ä.) führt bei Null zu einem Fehler. Daher gibts den Overload für Variant, so dass der Variant nicht erst in eine Null
exception läuft sondern das "auspacken" dem Nullable überlässt.
Und nein, ein Nullable ist kein Variant! In einen Variant kann ich zur Laufzeit alles (*) reinpacken und der Variant ist fröhlich. In einen Nullable geht nur T oder ein Variant (wobei der Variant auch nur einen T beinhalten darf, es wird hier keine Konvertierung durchgeführt). Dass das nunmal nicht zur Compiletime geht liegt daran, dass es nicht im Compiler eingebaut ist. Dafür musst du dich an Embarcadero wenden.
(*) was in einen Variant passt
Wenn du in deinem Code die stellen aufdecken willst, die den Variant overload nutzen, dann schlag ich vor, pack nen deprecated an diesen Overload und du siehst beim Kompilieren jede Stelle, die den nutzt.