The character 立 actually has multiple sinitic (on’yomi) readings:
- Goon: りゅう (ryū) – based on older southern Chinese dialects (namely Wú or Yuè).
- Kan’on: りゅう (ryū) – based on the Middle Chinese dialects of Chang'an (around modern-day Xi'an) and Henan.
- Kan’yōon: りつ (ritsu) – commonly accepted reading that originates from a misinterpretation or a mistake
If we compare modern Chinese dialects, we get lì (Mandarin), laap6 (Cantonese), li̍p (Hakka) and li̍p (Min Nan). Given this, the Middle Chinese form resembled something like *lip̚ or *liəp̚. This would have been borrowed into Old Japanese as *ripu, with the -u being added due to the CV(N) syllable structure of the language. At some point in the language, /p/ had become /ɸ/, which eventually became /w/ and finally null /∅/ in medial position. So the word underwent this shift: *ripu → *riɸu → *riwu → *riu → *riju → rjuu (ryuu).
So how do we get りつ (ritsu)? The most obvious reason would simply be that the on’yomi above was confounded with the native kun’yomi reading たつ (tatsu). This must have happened relatively early on, as the reading りつ and its dialectal variants (e.g. ぢつ, じつ) are found throughout Japan and even in Okinawan. There aren't, as far as I'm aware, any dialects that favour the reading りゅう where りつ is used in standard Japanese.