At lunch, England were 22/0 with openers Alastair Cook (17 batting) and Nick Compton (5 batting) beginning on a sedate and cautious note to see off the Indian new ball bowlers.
India resumed at the overnight score of 273/7, but England bowlers took the three remaining wickets in quick time to hold back the hosts from getting to a sizeable total.
Steven Finn dismissed Dhoni at 52 (114b 5x4 2x6) to end the Indian innings, 62 minutes into the morning session. The skipper batted well with the tail and kept the strike to shield the tailenders from the prowling English spinner Monty Panesar.
With wickets falling at the other end, Dhoni upped the tempo and hit consecutive sixes of Panesar and brought in the process the team's 300 in the 98th over.
Not surprisingly, England started the day with James Anderson and Panesar.
The left armer, the first Sikh to find a place in the England team, had devastated India in the previous Test in Mumbai, and continued to do the good work in the morning, sending back Zaheer Khan (6) and Ishant Sharma (0) in successive overs.
Panesar (4/90) trapped Khan plumb in front of the wicket, before shattering Sharma's stumps to emerge as the most successful bowler.
For the Indians, Sachin top scored with a gutsy 76, thereby surpassing a personal milestone of 34,000 international runs on day one Wednesday. Gautam Gambhir's gritty 60 was the other major contribution.
Anderson returned figures of 3/89, including the wicket of Tendulkar.
Mumbai Indians won the toss and decided to bat against Sunrisers Hyderabad in their Indian Premier League match here Wednesday.