The problem is that you are trying to use the refresh method incorrectly. It takes the actual ad unit instance as an argument not just the name of it as a string.
Try this instead:
var adunits = {};
adunits['slot1'] = googletag.defineSlot('/1234/example', [[728, 90], 'gpt-divId1').addService(googletag.pubads());
adunits['slot2'] = googletag.defineSlot('/1234/example', [[300, 250], 'gpt-divId2').addService(googletag.pubads());
adunits['slot3'] = googletag.defineSlot('/1234/example', [[300, 250], 'gpt-divId3').addService(googletag.pubads());
And then your code to refresh the adunits becomes:
var gptdivs = [];
$('.myContainer .gpt-holder').each(function(){
gptdivs.push(adunits[$(this).attr('data-gpt-slot')]);
});
googletag.pubads().refresh(gptdivs);