My understanding based how I’ve heard it used personally is that 笑顔 is the go-to word if you want to refer to specific occurrence of a smile. This is also why this is the word that turns to a する verb. If a young child gets the present they wanted from Santa Claus, you’ll see an 笑顔.
笑み is referring to the facial expression itself, and I think can encompass any kind of smile. I have the least confidence about this one, especially since the kanji on its own 笑 is essentially the slang for “lol” and is verbalized 笑み. I think, however, the slang meaning only occurs when you use that term alone, rather than in a sentence. I’ll have to ask a coworker/friend when I get the chance.
笑い is usually laughter, but I’ve definitely heard it used to refer to a smile at someone else’s expense, such as a grin, sneer, or smirk. I guess the context is that your facial expression might as well be laughing even if you aren’t actually making any sound. I am a fairly reserved person, but I’m fairly weak to bouts of amusement, so most of the time, if I find something funny, I hold back my laughter into an amused smile. My students will usually always point to me use 笑い.
EDIT: I asked two coworkers who were free. Both stated that 笑顔 referred specifically to the action of smiling, 笑み refers to 表情 (facial expression), and that 笑い only refers to vocal response and therefore strictly laughter. Only one of the two (who is also the only computer-savvy Japanese person at my workplace) knew about the slang use of 笑（えみ). So there’s a limited look into the natives’ opinion on the three words.