Not an answer, but the same problem occurs in the i-jetty project where a Java servlet is loaded dynamically, only when Android below 10 is used.
01-05 17:18:27.405 3941 3993 E Jetty : FAILED search: java.lang.IncompatibleClassChangeError: Structural change of javax.servlet.http.HttpServlet is hazardous (/data/data/org.mortbay.ijetty/cache/jetty-0.0.0.0-8080-msx-_msx-any-/classes.dex at compile time, /data/app/org.mortbay.ijetty-1/oat/arm/base.odex at runtime): Direct method count off: 5 vs 4
Compile time direct methods in the 'msx' servlet (normal .dex)
01-05 17:18:27.405 3941 3993 E Jetty : Direct methods:
01-05 17:18:27.405 3941 3993 E Jetty : <clinit>()V
01-05 17:18:27.405 3941 3993 E Jetty : <init>()V
01-05 17:18:27.405 3941 3993 E Jetty : class$(Ljava/lang/String;)Ljava/lang/Class;
01-05 17:18:27.405 3941 3993 E Jetty : getAllDeclaredMethods(Ljava/lang/Class;)[Ljava/lang/reflect/Method;
01-05 17:18:27.405 3941 3993 E Jetty : maybeSetLastModified(Ljavax/servlet/http/HttpServletResponse;J)V
Runtime direct methods in the i-jetty container (optimized .odex)
01-05 17:18:27.405 3941 3993 E Jetty : Direct methods:
01-05 17:18:27.405 3941 3993 E Jetty : <clinit>()V
01-05 17:18:27.405 3941 3993 E Jetty : <init>()V
01-05 17:18:27.405 3941 3993 E Jetty : getAllDeclaredMethods(Ljava/lang/Class;)[Ljava/lang/reflect/Method;
01-05 17:18:27.405 3941 3993 E Jetty : maybeSetLastModified(Ljavax/servlet/http/HttpServletResponse;J)V
In the .odex
class$(Ljava/lang/String;)Ljava/lang/Class;
has been removed