I think that whether people take offence or not is due to a few things...
You are right that by bottling up what you think, and then when you've had enough, telling someone what's bugging you can be upsetting to that person. However, I do the same as you and know how difficult it can be to tell someone what you are thinking. If I was that person though, I would probably be thinking 'why didn't they tell me before?', and so that would be upsetting. I would want people to feel they could be honest with me and so I would be hurt they hadn't said anything earlier.
Also, a person may react differently if it's a work matter, or a personal matter. At work, if someone is behaving in a way that's having a negative effect on theirs, or others work, then their boss would probably speak to them about it. However, in that situation, it seems less personal, and I believe easier for most people to take than if a friend pulls them up on something they are doing.
Another thing that could upset someone is if you appear to be criticizing them as a person, instead of just criticizing one or two of their actions.
Finally, some people will never take advice. You can be the most tactful person in the world, and still they wouldn't listen to you. If that's the case, then I'm afraid it's probably unlikely they will ever listen to you, or anyone else.