Demand/in use/assigned do not have a direct relationship. You cannot accurately predict what one will look like by looking at any other.
The Hyper-V "assigned" field will always tell you exactly what physical memory the guest currently owns.
The Hyper-V "demand" field is reported by the memory manager in the guest. Demand can be lower or higher than "in use" or "assigned".
The guest "in use" displays are correct as far as the guest's memory manager knows. When Dynamic Memory takes from a guest, it does so by "expanding" the "memory" that it consumes inside the guest. So, the guest shows a larger "in use" value but in reality Hyper-V has taken that memory away. I highly doubt that's what's going on here because your total memory size as reported by the guest is the same as your "startup" value, meaning that Hyper-V has not taken anything away. However, the tools you have used do not show that information.
Use RAMMap from SysInternals. Some of what it shows as "driver locked" might be used by Dynamic Memory.
It's not expanding in this case because it has no reason to expand. Demand is low and 90% utilization is less than 100%. A high percentage of consumed memory is only bad when you don't have anything that should be using a lot of memory. If you've got a high memory app and it's using most but not all of the memory, then that's good resource utilization.
If you were expected the app to use more memory, then that might have something to do with the nature of "demand". Memory management is an exact science, but figuring out "demand" is a bit more nebulous. Most apps just ask for memory when they need it and release it when they don't. Others, usually server apps, allocate a large pool at startup and only release it at shutdown. Their developers build algorithms to decide how much to ask for. So, if you have an app that starts up and follows a memory allocation algorithm of: "how much is there, how much can I have, I'll take x% of that," then it only "sees" 8GB available at startup because that's your startup memory value. If it thinks that's the cap, then it will ask for a lower number than it could technically have. From that point onward, its "demand" will be fixed at that point. I don't think that's what's going on here because the demand/available ratio is so low, but I don't know anything about your apps, either. If you think that this is the problem, you can raise the VM's startup value and let Hyper-V pressure it down if it wants.