Of course you can’t force the guy out, and nor should you; he’s a valued member of staff. Your aim is to retain him.
What you can get him to do is really examine whether his surface whinging is more than that. This is genuinely for his good as much as yours; you want a motivated member of staff, and by asking him whether there’s real substance to his complaint, you’ll get him to properly consider it. At this point it’s always a good idea to ask whether he’s started looking elsewhere; a lot of people are pretty honest, and will tell you that yes, they’ve seen something closer to home that pays the same….in which case their mind may already be made up.
You’ve already determined that his role has to be office based, and that you have no intention of paying him more, so you have to be aware that if he asks for either/both and you say no, you’re upping the stakes and making it more likely that he’ll go.
If he comes back and says that he really wants to go, so be it.
If he comes back and says he’s perfectly happy, no real issues, then ask him to stop the whinging, as it is unsettling, and anyway, he knew the terms when he joined. You should ask him how he feels, given that he’s been turned down for his requests.
It’s entirely proper for you, his employer, to enquire as to what his plans are, given that he’s said that he’s thinking of leaving; he raised this, not you, and you’re doing what any good employer should – engaging, rather than hiding your head in the sand as so many ‘managers’ do. The one thing you cannot do is ignore this.
Obviously, he could come back and say that everything’s fine, but then leave a month later. Fair enough, but you hold him to his notice period and prepare yourself to recruit in case this occurs. Get some CVs in to see what’s happening in the market, and see what it’ll cost you to replace.
As to whether you’d pay him redundancy or go down the compromise route…words fail me. He is the one who volunteered the information that he wants to resign. Why on earth would you consider paying someone for this?