While testing the latest patch, I came across another situation that appears to be a separate bug. This problem happens with a vanilla branch_4x, but also happens with my patch.
What I did was set sharedLib to foo, then moved icu4j-49.1.jar from lib to foo, both under solr.solr.home. Some of my jars were in the automatically added lib, and one of them was in the explicitly stated foo.
Splitting the libs in this way resulted in the following log output, followed by the same exception mentioned in a comment above - it was unable to find ICUTokenizer.
INFO - 2013-05-25 02:25:09.890; org.apache.solr.core.CoreContainer; New CoreContainer 1473971679
INFO - 2013-05-25 02:25:09.891; org.apache.solr.core.CoreContainer; Loading CoreContainer using Solr Home: '/index/solr4/'
INFO - 2013-05-25 02:25:09.891; org.apache.solr.core.SolrResourceLoader; new SolrResourceLoader for directory: '/index/solr4/'
INFO - 2013-05-25 02:25:09.893; org.apache.solr.core.SolrResourceLoader; Adding 'file:/index/solr4/lib/mysql-connector-java-5.1.22-bin.jar' to classloader
INFO - 2013-05-25 02:25:09.893; org.apache.solr.core.SolrResourceLoader; Adding 'file:/index/solr4/lib/solr-dataimporthandler-4.4-SNAPSHOT.jar' to classloader
INFO - 2013-05-25 02:25:09.895; org.apache.solr.core.SolrResourceLoader; Adding 'file:/index/solr4/lib/lucene-analyzers-icu-4.4-SNAPSHOT.jar' to classloader
INFO - 2013-05-25 02:25:10.306; org.apache.solr.core.CoreContainer; loading shared library: /index/solr4/foo
INFO - 2013-05-25 02:25:10.306; org.apache.solr.core.SolrResourceLoader; Adding 'file:/index/solr4/foo/icu4j-49.1.jar' to classloader
At first I was thinking it might be an object visibility problem, so I tried making replaceClassLoader synchronized and then tried making classLoader volatile, neither change made it work. If all of the jars are in either lib or foo, then everything works.