I think that your best bet is to use the AfterSelectChange event. What you could do is keep track of what was originally selected in the BeforeSeletChange event, then compare this to what is selected in the AfterSelectChange in order to determine which cells should be selected. You will also likely need to keep a flag indicating that you're processing the SelectChange events so that you don't try to perform this logic recursively.
As for the issue with the focus rect, you would have to draw it yourself using a draw filter, since it is not bound by the clip rect of the cell, but rather of the grid itself.
-Matt