You're headed in the right direction. You DO want to sub class BusinessLayer, then inherit you BOs from this.
My comments were probably a bit confusing, as in my mind, I have classes that inherit from BusinessLayer and are intended to extend the base functionality (like you want to do with your set default values code) and then there are BOs which also inherit from BusinessLayer (or a sub class of BusinessLayer), but they are then built with the BO mapper. However, they are all sub-classes of BusinessLayer.
If you look in the designer file of a BO, you'll see ALL the other stuff you have to do to get a working BO. So, there is kind of this division between BusinessLayer, providing base functionality/common properties and BO, providing implementations for some of the common properties and providing data specific properties (to support data binding). BusinessLayer is exactly the place to put common code for BOs. BOs are the actual classes that interact with data and are bindable to controls.
To get a class that you can instantiate, you need to either have the BO mapper do the work or you need to do that manually (ugh).
//-- So, this is NOT going to work at some point
// ...BusinessLayer has a bunch of NotImplemented methods/properties
BusinessLayer busLayer1 = new BusinessLayer();
//-- This will work, because we are providing an actual BO.
// but only need the base functionality of the BusinessLayer.
BusinessLayer busLayer2 = new CustomersBO();
//-- And of course this will work too...
CustomersBO customers = new CustomersBO();
So, you do want to sub-class BusinessLayer and add you SetDefaultValues handler. Then you want to change the inheritance of BOs that need this functionality as you did. You then would instantiate only BOs, though you can have BusinessLayer type variables pointing to BOs.
Is this making more sense?