Here's another way. (See attachment.)
This is a little finicky if you go about moving operators, but if you do it at the end after your rig is done, it's alright.
What I do is have two trees, one in Modeling and one after my deformers in Animation on the same mesh, and on both trees I'm not doing anything on the mesh but in fact setting data on the cloud, even though the trees live on the mesh.
Therefore, because I'm setting this data from a particular position in the stack (of the mesh) each time, I get my pre-rigged state and my rigged/deformed state right after, always evaluating in the correct order. :)
I have attached a "live" example, which in practice is slower, as it's computing the locations constantly, and a "frozen" example. To do the frozen example, I delete my second tree temporarily, then I dug inside my compound in the Modeling tree and forced Show Values on my self.MeshLocations attribute. With the values showing, I rightclicked and did "Freeze Modeling", which froze the locations into the mesh. Then I can recreate the second tree and fetch my frozen locations. This works for as long as the topology stays the same.
One issue with this is when freezing it seems to freeze the whole stack of the pointcloud. However, this trick is still useful for successfully sticking lowres geo onto highres geo.
It's a bit hacky, but thought I'd share anyway.
-- Alan