Искать через Linq тупо, у бэкинг полей всегда статические имена - .GetField($"<{property.Name}>k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic);
Кстати, возвращаясь к задаче о 8-ферзях и А*, проблема была в том, что я забыл передать кастомный компаратор в PriorityQueue и изначально я получал ноды, которые должны были быть рассмотрены последними. Сейчас любая доска решается в течении 1 - 3 минут