The AFValues collection returned by PIPoint.RecordedValues does not have a dynamic attribute or PIPoint object associated with each AFValue. In a data processing/filtering scenario I would just take the AFValues collection, sort/filter/... the AFValues to get a subset of ones I want to update. Then merge those AFValues with a bunch of other AFValues and call AFListData.UpdateValues(...). Now this fails for AFValues without a dynamic attribute (likewise it fails for PIPoint.UpdateValues without a PIPoint associated).
Is this a concious decision by OSIsoft that it is the responsibility of the coder to "tag" (excuse the pun) the AFValue with the PI Point/Attribute after retrieving the data from a PIPoint?
Now, if the AFListData object supported RecordedValues the AF SDK would have to tag the AFValues.