You are adding delegate listeners, then you change the state, which in turn triggers those delegate listeners... furthermore when the toggle starts up it calls the delegate after setting the initial state. In either case, the delegate will always execute at least once on start. This is done for consistency purposes so that the associated data always matches the toggle's state.
Inside your callback function you are also not checking the state. You just check the name. Keep in mind that callback will be called both when the state is 'true' as well as when it's 'false'.
You need to check UIToggle.current.value before setting any player prefs, or going further for that matter. In your case, if it's false, just exit early.