I hear a lot about psychological barriers and choking etc.. but to me the real reason is far simpler.
We simply don't play enough batsmen.
Some will say that if that was the case the results would be the same outside of ICC events but that would be ignoring a few salient facts.
Usually these ICC matches are high stakes games, so losing usually means elimination. When you bowl you have 11 players sharing the pressure. When your batting it's just the two in the middle. Add to this, that Pakistan usually have 1 or 2 bits and pieces players in the the top 4 and have traditionally played 4 front-line batsmen. So, not only do we lose quick wickets, the main batsmen have to bat with extra caution as they know they tail is long and everything hinges on them.
ODIs are a batsmen's game and India pack their side with batsmen. Beef up the Pakistani batting by dropping a bowler and bits and pieces players and you might see a whole different approach.
Only in 1996 did we have enough batsmen but the batting order in that game was flawed.
When your bowling is put under pressure, you have the option of making a change within 6 deliveries, a luxury that your not afforded when batting.
The Malik's, Akmal's and Hafeez's (batting up the order) are never going to perform consistently in major events.