Should I define default register values in start up code?
To make code modular.  If your A/D routine, for example, always sets up the A/D completely for whatever mode it uses it in, then that routine can be called at any time whether immediately after powerup or after the A/D was used in some other way.

Code may jump back to the startup location to do a software reset.  In that case, the settings may not be at the powerup default values.

The powerup defaults may be different on different processors, so setting them in code makes the code more portable.

It documents what the settings are.  If these registers are explicitly set on startup, then someone looking at the code doesn't have to go digging in the datasheet to see what they are set to.

It documents that you care.  Let the hardware default the settings you aren't using, but explicitly set the ones you rely on.  This may alert some future maintainer to the importance of these particular settings.