Интерфейсная переменная хранит пару (тип, значение). Она равна nil только когда обе части nil. Если тип задан, а значение nil — интерфейс не nil.
var p *MyStruct = nil
var i interface{} = p
fmt.Println(i == nil) // false! тип задан (*MyStruct)
var j interface{}
fmt.Println(j == nil) // true — оба nil
Это частая ловушка при возврате ошибок. Никогда не возвращай типизированный nil через интерфейс — возвращай явно nil: return nil вместо return (*MyError)(nil).