Существует разница в том, как обрабатываются внутренние классы. Возьмите следующий класс:
public interface IFoo
{
}
internal class Foo: IFoo
{
}
Это даст вам список из одного элемента:
var types = typeof(IFoo).Assembly.GetTypes()
.Where(x => x.GetInterface(typeof(IFoo).FullName) != null)
.ToList();
Принимая во внимание, что это даст вам пустой список:
var types = typeof(IFoo).Assembly.GetTypes()
.Where(x => x.IsAssignableFrom(typeof(IFoo))
.ToList();