Не используйте Single
от Linq, чтобы найти нужное поле. Используйте метод GetField
, он уже принимает точное имя поля. Также можно повторно использовать флаги.
Чтобы получить значение, необходимо передать объект в том месте, где определено это поле.
Я считаю, что это должно работать, а не проверяться.
var flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
var pmCS = connection.GetType().GetField("pmCS", flags).GetValue(connection);
var m_pm = pmCS.GetType().GetField("m_pm", flags).GetValue(pmCS);
var m_fullDescriptor = m_pm.GetType().GetField("m_fullDescriptor", flags).GetValue(m_pm);