Done a bit of digging now, and maybe Kodi is being too clever....
I'll try to explain the current behaviour, and then you tell me.
Kodi maintains a local db of view states, ViewModes6.db, that stores the way the items for a virtual path, with all its options, were sorted per skin, last time you looked at them. It also stores how genres, artists, albums, and songs were sorted the last time you view them as a default for that kind of item. It uses this sort order for the item if there isn't a sort order stored for the virtual path from previous viewing that kind of item.
So for example say you navigate from genre to an artist with songs of that genre, to their albums (with songs of that genre), then
a) look at the songs for album 1 and sort by track,
b) look at the songs for album 2 and sort by duration,
c) look at the songs for album 3 and sort by title
If you then look at the songs for album 4 they will also be sorted by title, the last sort you used. But go back to look at album 2 and the songs will be sorted by duration, the way you previously looked at them for that album.
However if you take a different route to these songs, say navigate from the artists node (not genre) picking the same artist, on to their albums, and then view the songs for album 1, the virtual path will be different. It will be like musicdb://genres/6/87/1008/?albumartistsonly=false&artistid=87&genreid=6
whereas the previous route was musicdb://artists/87/1008/?albumartistsonly=false&artistid=87
Hence it will use the default song sort order.
Similarly if you change skin, then all the previous sort history will not be applied until you swap back to the old skin.
Sorting songs by artist and year implicitly also sorts by track number (including disc). I guess things could get messy if the artist releases more then one album in the same year, or if the songs on the album do not have the same year. I have some ongoing work to redesign some aspects of sorting, I'll think about this.
Also is it just me that gets wound up by the v16 onwards label1/label2 variation with sort method. e.g. sort songs by artist and year, and you don't see track number. I get that the thing you sort by should be displayed, but I would always like to see track number. Too much automation, not enough user choice!
Anyway, to have the discography of an artist play in the natural order you need to
a) Sort by artist and year as the default (last used) order for songs and never have specifically sorted the songs navigated to via the *all virtual path by some other order
or
b) Have navigated to the *all virtual path some time before and sorted by artist and year.
That sounds hard doesn't it. But it does mean that as a user you have total control over what order things are played, just not obviously!
The principle of storing how things look so you can go back to them is a good one. But I think it is a mistake that we store the options part of the virtual path in the ViewMode6.db, and could lead to what looks like odd behaviour.
That play from the artist context menu is the same as navigating from artist to albums then clicking on *all albums and then playing the songs seems right. But the sort order you will get, depending if you had looked at and sorted all the songs before, is a little opaque.
It also seems that the facility to sort the items in the current playlist would be very useful, currently it is shuffle or not.
What a rich topic, but not one to meddle with too hastily.