You're correct on the behavior, the field data is converted right before it's inserted into the fields object, thus when the factory is already known.
The question then is of course, will I change the code. It's a rather simple change, but any change can have big impact, as it's at the very core of the o/r mapper's object fetch pipeline: right after the datareader has read the rows, for all persistenceinfos passed into the routine, each value has to be converted, if required, then the stuff is processed further.
There's also the problem where the row reader has to know if a value was converted: some type converters could be used to produce non-null values for null values for non-nullable database fields and vice versa. Converting the stuff outside the row reader requires that the rowreader gets this info, but the signature doesn't allow that (and it's a protected virtual routine, as it is overriden by some customers for special pre-processing). Furthermore, converting the data outside the rowreader would make the parameter for the persistence info useless.
So, the change could be made, but it breaks code or has a high impact, something which we'll not do in the middle of a release. (i.o.w.: I could file a change request for v3, but not for this version).
I pressume your code runs on oracle and you decided to use guids because your app also uses sqlserver? Otherwise why use this approach, if I may ask?
It's not that big of an impact for you really, as discriminator values aren't used in your code (they're hidden away from you) so if the field is a guid or not doesn't really matter much.