Wow, sounds like the bard player is like several people I've DMed before. Notice I said, "Dmed before". Don't let 1 player cause you grief, it's totally not worth putting up with.
It sounds like you did everything just like any good DM would have done. Penalties to Diplomacy checks are perfectly fine (but I hope you are also giving bonuses to checks if the situation calls for it). The only thing I could suggest about handling that scenario is that I really suggest rolling for those kind of checks yourself without players seeing the results.
Players shouldn't know how well they are influencing an NPC; they should be told how the NPC reacts to their player trying to influence them and nothing more. When a player sees a high die roll, of course he's going to have expectations on how
you should be roleplaying your NPCs. A player should
never tell you how something in the world should work and letting them know skill checks like this gives them ammo to try and control the world around them. Rolling secretly also keeps players from arguing with you. I roll the players appraise, bluff, diplomacy, disguise, gather info, hide, intimidate, listen, move silently, search, sense motive, spot, & use rope checks myself behind my DM screen. In 5 years of DMing 3.5, I have never once had a player argue about what
should have happened in my world. That's like arguing that Hilary Clinton should have won a debate because she obviously rolled a natural 20
And complaining about driving 30 minutes and chipping in for gas is disrespectful & selfish. I wouldn't even game with a guy that asked me to chip in for gas. 30 minutes is nothing here in the Bay Area. I know it's a long time for smaller towns, but really, it's nothing. An hour drive commute to work is normal around here. One of my players drives an hour to game with us. We all buy each other drinks & snacks and are easy going about it. If your player whines about a couple of bucks in gas & 30 minutes of his time, he should be paying you to DM his butt. After all, you spend much more time than he does on providing him with some D&D fun.
I no longer put up with problem players like this. Any slight grief that a player causes me and I replace him with another player. My fun is more important to me than putting up with peoples crap. People think the game should be catered to them rather than just going with the flow and making the most fun out of it. This guy won't change, even if he does make a new character. And if he goes, his wife goes. You should stick to your guns and DM the way you want to DM if the other players enjoy it. Let him know he's causing you grief & don't cater to this guy. If he wants to pout, then he can leave the group. I would go ahead and start testing the waters for new players. Meet a few people, but don't settle on anyone. Look for only the best players. If you meet someone good, let them play with you guys. If the problem player still sticks around, then let him know you no longer want to DM him.
Seriously, from my own experiences....it sucks to switch players a lot, and it'll seem like all the work you did in the campaign is ruined. But it's not. I've gone through a lot of annoying players & players with conflicting playstyles as myself, but I finally have a good group. And D&D is so sweet when you're playing with laid back easy-going people!