Although not an instruction on where and how to fix (mostly because I'm off to bed in a few), I read somewhere once that the best way to make usernames feel case insensitive during the log-in process is to use a strtolower() function on both the username entered and on the data collected from the database. It won't matter how it's stored in the database or how the user entered it, as both are being converted to lowercase strings just during the checking process.
However, checking like this should also be done during the registration process, of course, to convert whatever the user submitted to lowercase, and running against the database usernames (also converted to lowercase), to make sure no user names exist sharing those letters (regardless of case).
In no case are the usernames being stored or displayed as anything other than how they were initially registered, it'd be just for checking on the backend. (Although some propose saving a second column that is a version of the user's username, only lowercase, for faster checking.)
Would anyone else like to take it from here?
(PS: While we're at fixing the registration usernames,
this bug over here needs fixing, too.)