SPView.ViewFields is a collection of internal field names, according to MSDN. (It is not a list of display names, as can be seen by examining the view fields of the 'UserInformationList' list).
This is surprisingly inconvenient, as SPList.Fields is indexed only by display name (or GUID, or index), and not by internal name at all.
Therefore, to map from internal names (such as are held in SPViewFields, or are encoded in CAML expressions), one cannot simply use the SPList.Fields accessor. One needs first build a dictionary mapping all internal names to something useful (e.g., GUID).
I can only guess that the SharePoint internal code uses some other (inaccessible) means for finding fields from the internal names -- which it must do frequently in rendering views and CAML.