I proved that this is a bug / limitation in NVelocity. I downloaded the source for NVelocity 1.1.0 (where is 1.1.1 from Nuget?) and linked into my project and traced to the issue. The introspection code is a bit naive and returns the first thing it finds regarding a property, not checking to see if there is a better candidate. With .NET reflection, there may be a list of properties for a type with the same name but different DeclaringType. Especially if a property is not virtual, and has hidden a base property, it must check the propInfo.DeclaringType == type of object or correct OO is out the window.
I patched NVelocity to work correctly with this aspect of C# inheritance. I will go through the codebase and see what else may need addressing regarding this. I will publish my patched version somewhere with improved documentation I hope.
I am boggled/bothered by how slim the docs are out there regarding NVelocity, and how little evidence of work or maintenance is going on, nor where the latest source code resides. I've had enough frustration with lack of movement with this and other projects that I may fork it for my own sake since I have commercial products depending on it.