Good question, also props for differentiating the two different scenarios. I think that you are in luck because there is indeed just a simple correct answer:
Do not remove selected options from the dropdown!
Reasons
- Moving elements of the UI is always dangerous. If you remove elements from a dropdown when something happens, the options of the select "move around". That can very easily upset the user, as it makes the interface feel fiddly and unstable. Like trying to swat a particularly agile mosquito. So unless you have a very good reason (e.g., an option does not exist anymore) try to keep the UI steady and unchanging.
- Conform to Standards. Unless your app is innovative in this exact area, it is always a good idea to adhere to the standards the user is used to. In this case, it is a good idea to check how
HTML
's select
works out the box: It does not remove the selected option.
- Consider all use-cases: Maybe I just click a dropdown again more or less accidentally but don't want to change my answer. The most reassuring interaction here is to allow the user to just click the selected option again (so I am sure I didn't change anything). Especially when we are talking about the multi-select, people might often open the dropdown to get an overview of what they selected and what is possible - that doesn't work if they can't see all options, selected or not.
Extra: Multi-Select dropdowns may be dangerous
I know you didn't ask this, but I just want to ask: How do you handle the user clicking an option on the multi-select? Does it close again and the user has to open it for every option? If not, when does it close? Is the user clear that she can type or does she feel prompted to search through the (possibly quite long) dropdown every time?
If you feel like the answers to these question might hint at some problems, you may think about a checkbox list or a more complex solution that is really clear that you should type instead; something like the Deviantart tag input:

TLDR: Do not change the way the dropdown works natively (or imitate the HTML way if building it yourself), which means not hiding options.