It turns out the need to use -i to force interactive was because of a mistake in the logical test in org.python.util.jython#run. Turning the test to a boolean implication fixed the problem.
Also this got ipython to support colorization too! (Not certain how that change got propagated, maybe ipython accesses these options? Some magic at work, which is what we might expect for something like ipython.)