I am an overapologiser, and I have accidentally as a dad, taught my 3 year old son to do the same.
This is out of courteous behaviour: I will say to him "sorry, x; I forgot you were waiting to", or if I knock into him a little I will say "sorry, x" and lots of other situations as well (fyi, we didn't name him x). I tend to do this a lot as I am a very considerate person, and empathic. I also verbalise my thinking for him to learn from and about. I do however also find being assertive difficult because of fear of confrontation, though I am improving there.
This has led to him habitually saying it over very minor things like "sorry Daddy, I forgot you were getting a towel", or "sorry Daddy I had the wrong toy" etc. It's a pretty ingrained habit now.
Now, I think there's nothing really wrong with saying sorry, as long as you're able to be assertive as well and understand the difference: one is acknowledging that you've caused a trivial inconvenience to someone, and one is feeling bad for something they've done. He does the latter just fine.
To combat this we're taught to thank someone, rather than apologise to them: don't say sorry I kept you waiting, say thank you for waiting. But that's a rather blunt tool in this context.
Any ideas on how to break that habit for him? It seems to me to be quite a mature concept. I appreciate that the change is likely to be something to do with my behaviour since I'm acutely aware that he learns by what I do and how I treat him, and other people rather than what I've told him to say.