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.