Your recollection is incomplete. 90% was the peak figure for user desktop replacements, but very quickly those users began to request a return to Windows as the Linux-based solutions were missing key functions.
The Linux ecosystem has no centre, and its continuous development model makes it much more of a moving target for internal application developers than Windows is, unless you expend a fair amount of effort maintaining your own distro. (Package maintainers are the real heroes of Linux - it’s a thankless, time-consuming job, but without them the whole ecosystem would collapse).
The nail in the coffin was the prospect of decentralised working. There simply wasn’t any good private-cloud solution for collaborative work. For several classes of application, Munich basically came to the realisation that to make Linux work for it, it would have to permantently invest in its own team of programmers and maintainers in addition to its existing IT staff (who also had their own grievances regarding provisioning and monitoring). It was a buy/build decision, and the real costs of “build” were now known to be far higher than simply paying for a ready-made product. After all, the city doesn’t build and maintain its own trams - the latest lot was bought from Siemens - so what made software any different?
Other organisations have fared better with Linux, however, but they were more pragmatic: adopting it where it was a viable and mature alternative. The mistake Munich made was the (ultimately ideological) decision to do a top-to-bottom replacement of every software system with a FOSS alternative. That really makes no sense - you might not like Exchange, but is there really a FOSS alternative that’s anywhere near as good at managing office communications?