Seems now the let clause undertake the overhead:
Samples % Function
7230 77% - symbol-overlay-post-command
7227 77% - if
7183 77% - string=
7180 77% - symbol-overlay-get-symbol
7180 77% - or
7176 77% - thing-at-point
7163 77% - save-restriction
7138 76% - let
221 2% - cond
206 2% + let
2 0% let*
7 0% + if
40 0% + symbol-overlay-remove-temp
1234 13% - command-execute
1215 13% - call-interactively
1205 12% - funcall-interactively
783 8% + next-line
415 4% + previous-line
7 0% + execute-extended-command
3 0% + byte-code
358 3% + ...
255 2% + redisplay_internal (C function)
156 1% + timer-event-handler
25 0% + undo-auto--add-boundary
18 0% + jit-lock--antiblink-post-command
17 0% + internal-timer-start-idle
8 0% + clear-minibuffer-message