A few thoughts in no particular order:
Unlike this proposal, the existing 'reify' itself as core can actually be made well typed.
Tagged in the example could be replaced with explicit type application if backwards compatibility isn't a concern. OTOH, it is.
The form of reify' there is actually an uncomfortable middle ground between the current implementation and perhaps the more "ghc-like" implementation that uses a type family to determine 'a'. On the other hand, giving the type above with the type family in it would be rather awkward, and generalizing it further without it would make it even more brittle. On the other other hand, if you're going to be magic, you might as well go all the way to something like:
reify# :: (p => r) -> a -> r
and admit both fundep and TF forms. I mean, if you're going to lie you might as well lie big. It'd be nice to show that this can be used to reify KnownNat, Typeable, KnownSymbol, etc. and other commonly hacked dictionaries as well as Reifies.
There are a very large number of instances out there scattered across dozens of packages that would be broken by switching from Proxy to Tagged or explicit type application internally. (I realize that this is a lesser concern that can be resolved by a major version bump and some community friction, but it does mean pragmatically that migrating to something like this would need a plan.)
-Edward