So instead of converting to lowercase, store them with case preserved but do a case insensitive uniqueness check (and probably allow any case for login).
or just force all lowercase and keep the support burden lower and save yourself a ton of trouble when dealing with foreign systems. Add a rule on incoming e-mail to convert all addresses for the local domain to lowercase to complete the package.
It probably depends on whether we're talking about making your own users, like the original link, or allowing users to interface with other systems, like entering an email address.
Yes, this seems to be the right behavior for case-insensitive things like DNS names as well. If a user inputs one, preserve the case when you store it, but do case-insensitive comparisons.
Yes, and its a pain in the butt error to track down. I was helping a friend with an old postfix / cyrus server with some custom software and case sensitivity was the final cause of bad mail delivery. Gotta love the combo of a bad config and an old mainframe app sending in all uppercase.