Ваш код очень близок к работе; проблема заключается в том, что GreenBorderButton применяет BorderBrush к самой кнопке, а не к границе в переопределенном шаблоне.
Чтобы это исправить, просто измените BorderBrush Border, чтобы использовать BorderBrush родительской кнопки. Вы можете сделать это с помощью TemplateBinding так:
<Style x:Key="BorderButton">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border"
BorderThickness="2"
BorderBrush="{TemplateBinding Property=BorderBrush}"
CornerRadius="3"
Background="{x:Null}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Затем вы можете использовать те же переопределенные стили, что и у вас, или вы можете просто сделать:
<Button Style="{StaticResource BorderButton}" BorderBrush="Blue" Content="Blue" />