I think it's a very interesting way to prevent city turtling, but it does create some problems with the city garrison promo and the units designed around it (archer-longbow line).
First thought: focus on a promotion that makes units popular to be in the city---that is a promotion that makes them the royal guard, the people's brownshirts, etc... that don't cause unhappiness in a city. The simplest solution is to make the City Garrision promo line do double duty that way. An adjunct change would be to make it expensely possible for any unit to get City Garrison--like maybe after Combat II, so even your melee troops could be city guards.
So basically if any unit lacks that promo and is stationed in a city, it causes a degree of happiness, even if it's the first unit (or maybe the second unit?).
That alone and it becomes harder to keep a city stocked full of units.
A second thought (and I've seen at least one mod do this)---make the defense modifiers of a city dependent upon the amount of surrounding tiles of the city. If an enemy owns more than one tile around a city, the defense of the city tile should be modified somehow. Not saying that that should count as some kind of free bombardment, but it should affect at least the bonus that culture, fortifying, and City Garrison provide. Actual castle-walls should still have to actually be bombarded.
That alone will cause a fight for control of the tiles around a city.
Third thought: allow a true blockade of a city on land, just as it occurs on sea (though perhaps less generously). If an enemy unit is adjacent to a city, it should block the city from working tiles that it has to travel through that tile to get to. Figuring out what's fair here will take some balancing, but if one civ can get a line of 3 tiles covered with units around a city, that should block the city from working those three tiles, and some more.
That will make sieges more deadly, and field battles more useful.
Fourth thought---make it possible to blockade enemy roads as supply routes. Not sure if this can't happen already. Usually I just cut them with horse units, but a blockade that gives gold and blocks resources (or even allows intermittent syphoning of resources) would be useful and force some battles in open ground.
Thus, the first change in my system - Having troops stationed in a city shuts down all production. Where will the troops go, you ask? two possibilities, i guess. One is to the countries borders, where they'll hopefully form lines (OMG! Trenches!). The other is that they'll just kinda be around, on the countries countryside.
Part two. If an enemy troop is adjacent to a city (ie within the 8 squares surrounding it), the city shuts down. Moreover, he seiges whatever side he happens to be on. with 4 troops (or 4 sets of troops) one could completely seige a city. any units inside a seiged city would lose a bit of health over several turns. the amount it stops at would depend on how many sides are covered - 10% for each side.
what do you guys think?