I don't know what kind of testing you did, but testing and reverse-engineering has been done by a million people before you and they all agree.
Documentation is here: https://www.ufopaedia.org/index.php/SMOKREF.DAT
I did deeper testing and discovered that we were both wrong. The documentation appears to be right, and it tells a story different from what you or I said.
What you said (and I'm paraphrasing based on how I interpreted it): There are three different sets of animation, the top four frames (thin smoke), the middle four frames(medium smoke), and the bottom four frames(thick smoke).
What I said: There are two sets of animation, the first six frames, and the last six frames.
What the documentation says: It selects an initial frame based on the smoke's remaining lifespan and animates through that frame and the next three frames.
What actually happens: There are three possible smoke animations, frames 1-4, frames 2-5, and frames 3-6. The remaining 6 sprite indexes aren't ever used.
https://youtu.be/nbtl7_C6AgsIn this video, I have made a smoke cloud using the smoke spritesheet below. You can see (easier at 0.25x speed) that each animation uses a set of four sprites taken from the first six on the sheet. I tried this several more times and got the same results every time.