LoL was at minimum
distinctively buggy. It wasn't the "gamebreaking bullshit" approach of e.g. Sim City, but it was jarring and frequent. There seemed to be two major problems.
The first was a reliance on kludges in new code (like that Lux ult) - it was the distinctive look of a team trying to put out new features faster than their dev time permitted.
The second was an inability to rely on invariants. Most games can say "X is always true, Y is always true except in case Z" and maintain that even across many and expansions. League (and other MOBAs) relied on putting out new characters with novel, interesting abilities. But that leaves game design and software design in conflict; a major source of novelty is breaking rules other characters share. And so everyone has some silly special case that makes all other development harder, and also reveals the kludges in problem one.
Mordekaiser can copy dead units, so every single unit has to be checked to not break when he does that. Lux ults are made of minions, so every character with a "dash to minion" ability has to be safeguarded against dashing to the ult. And so on, for characters^2 interactions.
Things are vastly better than they used to be, but it's not a surprise the thing got a reputation for bugginess.