I know this is a little old, but I'm having the exact same issue right now, I found this thread, and then I found an easy workaround.
The issue:
I fixed some of the things the validator told me about, clicked the Revalidate button, and it shows the same errors and source code as it did before I made changes.
Some caching is definitely happening somewhere. I'm using WordPress too, along with the W3TC plugin, but the only Browser cache setting I have enabled is Set Last-Modified header.
The solution:
I've ran into similar issues before with other services, and here is an easy workaround...
Add "?x=1" to the end of the url, increasing the value each time you want to re-validate. This makes it skip the cache because it is a different url. (If you already have a question mark in the url, use "&x=1". If you already have "x=" in the url, use anything else, like "y=".)
For example...
If you want to validate the home page at:
http://mydomain.com/
...you can re-validate it at:
http://mydomain.com/?x=1
...and re-validate it again at:
http://mydomain.com/?x=2
...and so on.
If you want to validate a dynamic page at:
http://mydomain.com/mypage.php?x=123
...you can re-validate that page at:
http://mydomain_com/mypage.php?x=123&y=1
...and validate it again at:
http://mydomain_com/mypage.php?x=123?y=2
...and so on.