On completing a level, clicking the win screen 'next level' button updates the meta data for the *next* level (it's meant to update the *current* level, so the level selection screen will be updated to now show 100% for that level).
But the next level isn't loaded in yet, so this check errors, and for some reason the fallback for that is "100%".
At some point during development, I noticed that the meta data wasn't being updated after completing a level, so I added some code elsewhere to update the meta data for the current level.
So the achievement checker now thinks that all levels are completed, and releases the 100% achievement (early).