Я ненавижу IsAssignableFrom, это так гнусно написано.
Я всегда свертываю расширение:
public static bool IsTypeOf<T>(this Type type)
{
return typeof (T).IsAssignableFrom(type);
}
Использование этого предотвращает коварное ошибочное исполнение.
Тогда вы могли бы написать:
var ruleTypes = ruleType.Assembly.GetTypes().Where(t=> t.IsTypeOf<IRule>());