What about ^(([a-z0-9]{4}){2,8})$ since you show in the last example having to support some different multiples of 4, 8 to 32. I used Notepad++ to check my results, hence the other changes in the expression.
Obviously it only works when there is the situation as you explained, all multiples of 4 in the range of 8 to 32.