창피 is closer to 'ashamed'. In situations like drunkenly vomiting in public; your failing grade announced to the whole class; getting your wedding proposal declined in front of everyone, you might feel this '창피하다', which you could use '부끄럽다'(this also means being shy in other contexts) as well. You could also be '창피하다' for/of someone else doing something shameful.
Although it still has a similar meaning and usage, we use '민망하다' more when we are embarrassed to see someone else doing something embarrassing. We might be '민망하다' when we see a couple making out in public; an erotic scene comes up while watching TV with parents; your spouse praise way too much of you to your friends.
'당황하다' is a little different. It's more of 'being puzzled', 'being perplexed', by something unexpected happening. As you mentioned, when you forget something that you were supposed to bring; someone asks you to do that you are not aware of or not ready for; you bump into your ex you haven't got over yet in an elevator, you might feel '당황하다'.
Let me know if you have further questions.