Page thumbnail doesn’t display on navigation

the_post_thumbnail() echos content. This is explicitly stated in the Codex, and the function name follows the WordPress convention (mostly) that function names starting with the_ echo content.

Display the Featured Image (previously called Post Thumbnails) for the
current post, as set in that post’s edit screen.

The thumbnail will display as soon as that line in the walker executes. The thumbnail markup won’t be concatenated into your string as it should be.

You need get_the_post_thumbnail() instead, which follows the WordPress convention that functions starting with get_ return content. Many, but not all, the_ functions have get_ sibling functions.