I wanted to add a few things.
I think form the OP's list, (d) is unacceptable for most players and in terms of algorithmics, I can't understand how one can still write code that does that, nor how this gets past QA.
Otherwise, I understand the bugs listed aren't showstoppers.
I met just one showstopper in 91h of play: Rivers not showing on the map. I guess this one slipped through QA because it doesn't always happen, is not totally obvious, and seems related to one particular map script.
Overall, the product plays well and can proivde a lot of fun to anyone playing it less than 100 hours, which is good enough for most people I believe.
But as a programmer and modder, I looked at the code that IS available. Mostly the map scripts.
I find it not beautiful, to say the least.
It shows in some places lack of familiarity with the language used (some file has semicolons all over the place, in lua!)
It shows some bad design/coding techniques, in code that seems old, making it very brittle and hard to reuse.
The lack of familiarity with the language also shows in some constructs used (iterating on ipairs is slower than iterating on i = 1,#table for instance, which is also used, sometimes, but it's inconsistent)
The API exposed for map generation is rather poor. It's worse than Civ IV and V on release, less well documented.
It has some basic errors (like using global variables when it seems obvious they want local ones) which may cause the whole program to go down if they change a line somewhere else in the program.
For instance look at ResourceGenerator.lua line 398. score is a global variable. Yuck. Let's hope it'snot used anywhere else.
Loops: Compare lines 594 and 614. Why ipairs sometimes and1,N other times?
Or look at line 637 and despair about what "row" is. It's used as an index a few lines above, and then it's a global to which a table is assigned.
The code works. But it's ugly as hell, not half as efficient as it could be, and clearly in demand of some kind of code review and cleaning.
Just the fact they use a global instead of a local means the access to the variable is about 10 times slower than it should be.
Map generation does not seem to be that slow, but a good code review and/or someone who knew lua would probably speed the process by an order of magnitude, for the end-user.
Regarding the code we can't see (yet?):
From my point of view, the engine works mostly well. I do wonder if there was any point not using Unity. Endless Legend works fine with it, it's the same kind of game, was a new engine really needed?
Wouldn't have the money spent on making the engine be better spent polishing the game? I know Unity, as other engines, has bugs, so using their own engine gave control over these, but I think it's a strange decision.
Finally, I think most of the issues with the game are design issues. The UI is just plain bad in many places. It's not that bad when you are discovering the game, but it is really really bad if you want to use a lot of the features, due to bad design. It wouldn't have been harder to code a table instead of a list to compare scores for instance, but the player would have seen everything at a glance without having to scroll...
The AI is a bit of a separate problem. It's a design issue in the sense 1UPT + city protection make it difficult to efficiently attack a city after classical era, but it was also possible to fix. Suiciding 8 units against a city is better than letting the city snipe them one after the other. They might even take the city, whatever the cost. So this one looks like a lack of interest for the AI itself. I have problems placing why they tolerate that. It's really immersion breaking, but you have to "lose" to see it, and keep fighting against bad odds. I guess most people don't do that, hence why it wasn't fixed?