I'm going to do this by analogy rather than figuring out your exact situation, because you'll be able to work out the details.
Suppose I had a bunch of directories-- /angels, /breadcrumbs, /doughnuts, /devils etc-- and I decide things are getting way too messy and I want to group them into subdirectories. So I create 26 subdirectories /aa through /zz, move the existing files, and now I only have to deal with requests for old-style filenames.
That means anything beginning in /a now goes to directory /aa and so on.
Do not use [NC] or you will get into a big mess.
Preliminary step:
RewriteRule ^([a-z0-9-]*[A-Z].*) http://www.example.com/fixup.php [L]
Capture anything containing a capital letter, rewrite to a php script that first fixes the capitalization and then redirects to the correct page. The redirect happens on the fixup page, so requests containing capital letters will not be seen in your htaccess again.
For anything that was correctly lower-case in the first place:
RewriteRule ^([a-z])([^/]{2,}.*)?$ http://www.example.com/$1$1/$1$2 [R=301,L]
The {2,} constrains your Redirect to requests that aren't already asking for a two-letter directory. Yes, there are three separate occurrences of $1 in the Redirect. The first pair is the new directory /aa /bb and so on. The second pair is the entire request.
Two-letter words are icky and messy. Two letters, followed by a directory slash or an extension or nothing. The Condition is supposed to ensure that those two letters are not the same. (Requests for "aardvark" are fine. Requests for "aa" are not. Do not allow your users to create subdomains pertaining to Danish islands.)
RewriteCond %{REQUEST_URI} !^/([a-z])($1)
RewriteRule ^([a-z])([a-z]([/.].*)?)$ http://www.example.com/$1$1/$1$2 [R=301,L]
I think I may detour and test all this in MAMP. It could be useful. Here I was just extrapolating from what I do in text files when there's a glossary that has to be keyed to the first letter of the word.