So with a bit more research I've realised that:
There is a method called RegionManagerRegistrationBehavior.FindRegionManager which runs up through the logical tree looking for the Region Manager. When a typed data template (viewmodel poco) is dropped directly into the tree though the LogicalTreeHelper.GetParent
returns null when it hits it.
I've made a change to my own version which says this:
parent = LogicalTreeHelper.GetParent(dependencyObject);
if (parent == null)
parent = VisualTreeHelper.GetParent(dependencyObject);
However I'm hitting all the same issues around RegionContext and other DP's which Prism attempts to set on my ViewModel but realises it can't. Frustrating that the Pattern de jour can't be used easily.
Question to the authors - why aren't inherited DP's used? It would clean up the _WPF_ soooo much. The codebase looks really comprimised and more complex because of the cross-compilation for WPF and Silverlight.