I fully agree, this is much harder to translate (well) than one would expect.
There are hundreds of nuances and scenarios covered by the English "can I help you", and you list a lot of them... So I'll focus on three very typical broad categories (I'm sure people will give you more):
Strangers: Typically, offering your help finding directions to a tourist who looks lost.
Rather than a direct "Can I help you?", any variations on "are you OK?" (implying that you are ready to help) is probably the best way to go. Depending on context, anything from a
Close friends and family: Where an equivalent of the informal "Need a hand?" would be appropriate. Then
手伝う can come handy... From a purely cultural standpoint, I still would try to keep it sounding more like an offer than a question. E.g.
手伝ってあげよう ("let me help!") rather than (the otherwise perfectly correct):
手伝って欲しい？ ("do you want me to help?").
Less close friends, subordinates or same-level colleagues would be variations of the above (with appropriate use of polite verbal forms).
Your boss (or any person high-enough above you): is a different matter. There are many sonkeigo-infused expressions to offer help. They all have in common that you must make it sound like you are asking for a favour, not doing them a favour.
One of my personal favourite sonkeigo expression for that is:
(with countless variants:)
Which literally means you are begging your boss to do you the favour of accepting your help.
Edit: as for ways to thank somebody for their help. It is once again down to context. Most basic (and literal) way would be:
手伝ってくれてありがとうございました but if it was a big favour/help, you can't go wrong by focussing on "the trouble you've caused" (and apologising for it), in which case you'd use:
迷惑をかけて申し訳無い (for bigger favours) or a simple
すみません (which means both "sorry" and "thank you" in that context).