No matter what I try, I can't clear iActionId (confirmed by looking at the "settings" section on the app status page). The code that sets it looks something like this:
Have you tried seeing if removing this on the button makes a difference? My guess is that the behavior is undefined when you both submit the page (saving the preference you're trying to remove) and also do a removeSetting() (which should otherwise work) on it as part of clicking the same button, which you are--or at the very least I can't find anything documented about what you should expect if you try this.
If I remember correctly, I ran into something similar before, and one workaround I used was move the button that performs removeSetting() onto another page. That way, you don't have to worry about this at all--and in my case it was beneficial since it gave the user a chance to confirm. I might be mis-remembering the exact problem I was trying to solve, but it do recall it being similar to the above.
Nailed it! This is actually intended to be the "confirm" process; select a thing, then the button that enacts it (along with a cancel button which I removed for simplicity) shows up. I did two things based on your recommendation:
First, I moved the input into an "else" clause so it wouldn't be fighting the app.removeSetting call, and then I removed the submitOnChange: true from the button. Apparently when you remove a setting it forces a refresh, and everything works although not quite as gracefully as I'd hoped, in that the popup is hidden.
Now, can I add it again providing I recorded the device's exact display name or maybe its id ? How do I call a device within all the existing devices of the same capability on my hub in order to add it into a specific list entry in the settings?
Let me know if you need more info to get what I'm trying to do...