The Impact had an excellent chance to take the lead when Marco di Vaio latched onto Andres Romero's cross from the right, but he could only poke his effort wide of the target from close range.
Houston took the lead in the 30th minute when Barnes robbed Krzysztof Krol and drove into the box before cooly finishing under Evan Bush.
Montreal hit back just before the break as Felipe Martins accurately cut the ball back to Dilly Duka on the edge of the area, and the midfielder placed a low shot into the bottom corner with his left foot.
In the second half, the Impact took the lead as Di Vaio released the run of Ignacio Piatti through the middle, and the striker ran the length of the half and lifted an effort over Tyler Deric.
However, Houston pegged them back as former Derby Counter star Barnes scored his second goal of the game by prodding home from close range from an Omar Cummings cross into the middle.
The Dynamo regained the lead when a Brad Davis corner travelled through a crowd of players and found Ricardo Clark at the back post, and he volleyed the ball home from close range.
The visitors pushed for a late equaliser, but Houston managed to hold out for the three points.