Ok not checked out tulamide's version yet but I had a go as I like these type of challenges.
The code is broken up into functions which I hoping will make it easier to understand. The code that creates the hex grid can be changed to create any number of rings by changing the hex_ringTOTAL var.
The code for the shuffle only works correctly for hex circle grid with 19 tiles. The shuffle works by creating a table of data.. which after re-reading your post may beyond your requirements. On the upside you can shuffle the board 19 times and a tile will never appear in the same place twice.
Its pretty compact at 46 events and the hex draw is only 16 events anyhows hopefully someone else may find it useful reading this topic
Cap file Link: