something like this works
I'm not sure what some of your events mean to achieve.
For example on "score" set -> set item "score" to score... makes no sense. The value is already getting set by the set item action, and "on item set" just marks the point of time, when it's done - like running some actions after you've made sure that values have been passed to local storage.
On item score exists - set "score" to score? Why?
The current workflow seems to be as follows:
at start of layout -> (no matter what) -> localstorage "score" is set to the score global variable (which probably still is 0)
on button clicked -> local storage "highscore" always gets overwritten by current highscore (so it will become 0)
then score is higher than highscore, if the sprite was touched at least once, highscore becomes score and then you display the score, or if score is 0, you display 0.
So all you do on button click is display the score in your text.
Normally you would load the highscore at start, and if it's missing create it with the value 0.
Then on button click you would get the highscore. Then on item "highscore" get, you compare the itemvalue to score. If score is bigger, set a new highscore. If score is smaller than highscore, leave highscore untouched.