== для сравнения сначала приводит типы к общему знаменателю
с обоих сторон.
Не обязательно именно к Boolean.
Не обязательно с первого раза.
Там длинный список правил и очерёдности.
if же приводит аргумент конкретно и сразу к Boolean:
Boolean([]) === true // true
P.S. В современном js никто не использует ==, как раз чтобы не париться по этому поводу. Используй === и явные приведения, и ни о чём не волнуйся.)