If you have to support multiple screen sizes/resolutions, form inheritance is an excellent way to do it. Basically you design your form to fit the standard 320x240 screen. To support a different screen size, you just add a new form, inherit from your custom form (instead of just Form), and then re-arrange the controls as necessary.
Another useful trick is to wrap the ShowDialog call in a way that lets you set the parent form's caption to "" temporarily - this keeps all the open forms in your application from showing up in the running programs list. Another way to enhance the wrapper is to PInvoke SetForegroundWindow with the handle of the parent window. This ensures that the parent will always re-appear after the child is closed; without this call, it's possible for other windows to be inserted in the z-stack above the parent form.
Watch out for encryption on the SD card. SqlCE will stop working altogether. Oracle Lite's behavior under encryption is much more sinister, since parts of it work and parts of it don't.
Avoid SqlCE RDA and merge replication. These would be fantastic tools if they worked reliably, but they don't in situations where the network connection can unexpectedly be dropped during replication (quite common in the WM world). This one bit me HARD with a production app. The MS support tech we dealt with was finally forced to acknowledge that it just doesn't work 100%. Actual quote: "just keep trying to replicate - they'll merge correctly eventually".