The way most sites generate that information is based off of what the API tells them. For each player the API gives a Lane (Top, Mid, Bot, Jungle) and Role (Solo, Duo, Duo_Support, Duo_Carry, and None). As you can tell, these are not what you got in champion select, but like you said they are based on where the person is in the first few minutes of the game. I've had several ranked games where the Riot API mistook me for "Jungle Xerath" because I had to bail my Jungler out on an invade. Some websites counter a bit of that by making guesses (this Xerath didn't have Smite and didn't kill any Jungle camps, he probably wasn't Jungling), but that's still where most of the data comes from.
The thing with adding an additional field like 'Evolution' (or whatever you'd call it) is that it would show up for every champion, even if it wasn't used. The API still has fields for Dominion (such as their score) that are saved for every single game that's not Dominion because that's how it works.
It's for that reason that I think the Champion ID field would work better. Champion ID is something that already exists in the API for every player, meaning that you don't need to make a new field that shows up 10 times in every single match. A change could be made to the Champions endpoint to indicate if that Champion ID was pickable or not and if it evolved from another champion, which is similar to how the Items work.
Another alternative would be to use the Timeline data to have an Event for Kayn evolving. This would require an additional call on all Stat sites for games involving Kayn, but would work as well.