Наконец блоки выполняются, когда вы покидаете блок try. В вашем коде это происходит, когда вы возвращаете false. Это устанавливает возвращаемое значение в false и пытается выйти из функции. Но сначала он должен выйти из блока try, который запускает finally и перезаписывает возвращаемое значение на true.
Многие считают хорошей практикой программирования иметь один оператор return для каждой функции. Подумайте о том, чтобы сделать var retval в начале вашей функции и установить для него значение true или false в зависимости от ситуации, а затем структурировать код таким образом, чтобы он правильно проваливался до единственного возврата внизу.