В общем я уже сам разобрался.
Достаточно было в начале функции вставить
...
LayoutManager.Current.CurrentLayout = lt.LayoutName;
...
Поковыряв документацию, нашел другой (более логичный) способ получения замороженных слоев на видовом экране.
Хотя мне нужны только имена слоев, поэтому я оставлю старый способ. Но может кому-то пригодится:
public static IEnumerable<ObjectId> GetFrozenLayers(this Layout lt, Transaction tr)
{
LayoutManager.Current.CurrentLayout = lt.LayoutName;
var vpIds = lt.GetViewports();
if (vpIds.Count > 0)
{
var vp = (Viewport)tr.GetObject(vpIds[0],
OpenMode.ForRead, false, true);
foreach (ObjectId lrId in vp.GetFrozenLayers())
yield return lrId;
}
}