When you shut down and start a new session, you need to set that  system property in the new session as well.
Yes, I'm doing that.  My code contains two getConnection() calls, one when it starts and the other as an explicit shutdown.  The startup sequence is
new org.apache.derby.jdbc.EmbeddedDriver();
con = DriverManager.getConnection(...);          
I don't reset the system property again prior to the shutdown, e.g.
but I can't see how that would matter.

Is there any other way to force Derby to use rw mode?  I've read about a patch, but it wasn't clear how to implement it.