Jesus Rueda's first-half goal divided the two sides and saw the hosts halt a run of four matches without a win as they look to escape the bottom three.
Defeat also ended a three-match winning streak for Villarreal and serving a small blow to their hopes of claiming a Champions League place.
The opening half at Estadio Nuevo Jose Zorrilla lacked both entertainment and chances, although Oscar gave the home support something to cheer after 13 minutes with an effort from close range which he turned over the crossbar.
The next decent opening arrived four minutes before the interval but at least produced a goal.
Javier Aquino's clumsy challenge on Carlos Pena saw a free-kick awarded to the home side on the left wing. Fausto Rossi then took charge of the set-piece and played a lovely ball in for Rueda, who powered a header into the bottom right corner.
It was the boost in confidence Valladolid needed and Oscar tried to make it 2-0 minutes later but was denied by a solid save from Sergio Asenjo.
Villarreal continued to underperform after the break and could have fallen further behind had it not been for the swift actions of Asenjo in tipping Antonio Rukavina's drive from distance around a post.
Another chance fell Valladolid's way after 57 minutes as Rossi pumped in a corner to the near post which was headed fractionally wide by Pena.
The visitors finally got a promising glimpse of goal 13 minutes from time with a 20-yard strike from Ikechukwu Uche which was fumbled away by Diego Marino.
And they wasted another chance to equalise with full-time approaching with Marino preserving his side's lead by clearing a header from Manu Trigueros.