I think your problem is the following: Wireshark decodes the packets, so when you apply those filters the packets are already decoded, thus are able to access wlan.fc.type field.
Based on my personal experience and SharpPcap usage, the Filter you're trying to use is computed on a byte[], so you need to be way more specific to be sure it's applied properly.
For example, I've been using this filter for my purpose.
private const String filteringSV = "(ether[0:4] = 0x010CCD04)";
Additionally, remember to set the filter only on an already opened device.
if (nicToUse != null)
{
try
{
nicToUse.OnPacketArrival -= OnPackectArrivalLive;
nicToUse.OnPacketArrival += OnPackectArrivalLive;
try
{
if (nicToUse.Started)
nicToUse.StopCapture();
if (nicToUse.Opened)
nicToUse.Close();
}
catch (Exception)
{
//no handling, just do it.
}
nicToUse.Open(OpenFlags.Promiscuous|OpenFlags.MaxResponsiveness,10);
nicToUse.Filter = "(ether[0:4] = 0x010CCD04)";
nicToUse.StartCapture();
}
catch (Exception ex)
{
throw new Exception(Resources.SharpPCapPacketsProducer_Start_Error_while_starting_online_capture_, ex);
}
}
Hope it helped.