How are unit nicknames assigned? Are there any criteria to earn a specific nickname or is it just random from a large list? Does it have any correlation to performance in battle?
The nicknames are random within the class, as near as I can tell.
You'll only have assaults get nicknamed "Thunder", and only supports can ever be "Angel", for instance.
Battlescape performance is a non-factor; the nicknames are simply assigned when the units get promoted to sergeant.
There does appear to be one exception: Getting promoted to sergeant after winning a mission on December 25th will give your soldier the nickname, "Santa".