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 大丈夫ですか?
to 道に迷っているんですか。
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:)
お手伝いさせていただけますか
お手伝いさせていただきましょうか
手伝わせていただけますか
etc.
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 focusing 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).