I believe the best approach to this issue would be to actually make a tiny converter which would be dynamically controlling the text size.
Here is an example of such a converter:
C#
using System.Globalization;
public class FontSizeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double actualHeight = System.Convert.ToDouble(value);
        int fontSize = (int)(actualHeight * .5);
        return fontSize;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
And then here is the usage of this class within your xaml:
XAML
...
<Window.Resources>
    <l:FontSizeConverter x:Key="FSConverter" />
</Window.Resources>
...
<Grid>   
    <Button Content="Dat Button" FontSize="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, Converter={StaticResource FSConverter}}"/>    
</Grid>
Hope this helps, let me know if you will have any issues with that.
K.