Gareth Bale opened the scoring for Chris Coleman’s side with a 35 yard free-kick on 42 minutes before second half substitute Jamie Vardy levelled it up ten minutes after the interval.
Roy Hodgson’s side kept up the pressure against their neighbours and just when it looked as though Wales were going to hold on for a valuable point, Daniel Sturridge poked home the winner in stoppage time.
The win all but guarantees England’s passage to the Last 16 while Wales now need something against Russia.
Joe Hart played the 90 minutes for his country, while Raheem Sterling played the first 45 before he was replaced at half-time.
Both Hart and Sterling kept their places in England’s starting line-up from Saturday’s 1-1 draw with Russia in their opener.
Following Slovakia’s 2-1 win over Russia in the previous day’s game, it was a golden opportunity for either England or neighbours Wales to take charge of Group B.
England started the game the stronger with Wales seemingly content to put men behind the ball and soak up pressure.
Sterling had the first opportunity of the match after six minutes and he would have been disappointed not to have converted his sliding attempt from a pinpoint Adam Lallana cross from the right.
The City winger got himself into a great position after making an incisive run from the flank to the centre but he was just stretching as he met the centre and could only turn it over the angle of post and crossbar.
Wales continued to hunker down and rely on the pace of Gareth Bale on the counter, meaning it was something of a turgid opening to the game, although England could have had a penalty after half an hour.
The ball did clearly strike Ben Davies’s arm but the referee (probably correctly) judged that the Spurs defender knew nothing about it and therefore waved away the protests.
For all of England’s domination, it was Wales who took the lead just a few minutes before half-time.
Once again it was Bale who netted with a free-kick from all of 35 yards, the dip and swerve on his “knuckleball” strike deceiving Hart who got two hands to the strike but could not keep it out.
Hodgson made a double substitution at the interval with Vardy and former Blue Daniel Sturridge coming on to replace them.
Vardy didn’t take long to make an impression, equalising from close range after Ashley Williams’ header fell kindly for him just outside the six-yard box.
Hodgson gambled further, bringing on Marcus Rashford with 15 minutes to go but it was Sturridge who came up with the goods, stabbing home the winning goal in stoppage time.
Next up for England it’s Slovakia on Monday night.