First of all, I would say to treat inner public
/protected
/internal
classes the same way you would treat any other "outer" class. Meaning, use the same design principles.
As for inner classes, when I'm using inner private classes they usually end up just being a heap of bytes... meaning they don't do actual processing. They are just there to make writing code for the outer class easier.
I'm not telling you to write bad code, but you can be much more lax in your design with inner private classes. As a general rule, they should be simplistic and lightweight... don't go overboard with OO on inner classes. Besides, if you end up having to change anything in the inner class you'll only have to update references in the outer class... which TBH isn't a big deal at all.