This is a little late, but I just ran across this issue myself. It would appear to be a bug actually. I posted up some of what I found over on your GitHub issue, where hopefully the Xamarin team will make a fix.
In the mean time, I found a workaround that makes the flyout header identical between all platforms without having to any weird other hacks.
For full reference - what I found is that the white bar above your flyout header is actually a part of the flyout content below - the menu items. If you change the background color of the flyout menu, you'll see for yourself. It would appear that the flyout menu is allowed to flow in to the iOS safe area, but the header cannot. What I did was used a negative margin in the layout of the flyout header template, then set some padding to offset the safe area in an onplatform block. Because this then effectively shrinks the content area, I set the height by platform as well. This ends up looking like the code below:
<Shell.FlyoutHeaderTemplate>
<DataTemplate>
<StackLayout BackgroundColor="{DynamicResource Primary}">
<StackLayout.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,-1,0,0" />
</OnPlatform>
</StackLayout.Margin>
<StackLayout.Padding>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0,20,0,0" />
</OnPlatform>
</StackLayout.Padding>
<StackLayout.HeightRequest>
<OnPlatform x:TypeArguments="x:Double">
<On Platform="iOS" Value="220" />
<On Platform="Android" Value="200" />
</OnPlatform>
</StackLayout.HeightRequest>
<ContentHere>...</ContentHere>
</StackLayout>
</DataTemplate>
</Shell.FlyoutHeaderTemplate>
I can't believe that I've only seen this issue posted here and in that GitHub link... but hopefully this helps out anybody else that runs in to this until a fix from the Xamarin team can go in to effect!