Under 2008+, true memory free = cache + free. So in your case, the 4GB VM is using 3GB with 1GB truely free.
The memory stats seens in vCenter reflect active memory access. That is, the hypervisor knows when a VM is accessing memory and can report on the amount of memory that's "active" in this regard. But it cannot report on how much memory the GuestOS consider to be consumed/free.
You're basically reviewing 2 completely different stats that will not line up because they are reporting on different things.
Pretend I'm an operating system with running applications that collectively conumes 2GB of RAM, but I only actively/regularly access data stored in 10% of that 2GB allocated/consumed. So one stat will tell you I'm using 2GB of RAM, whereas the other will tell you I'm only actively/regularly using 10% of it.