Okay, now I'm just going craaaaaazy!

Here is my updated method (I just reversed the order; I reset the clipping offset and THEN reset the height)
void UpdateHeatSourceList () {
// To make this completely dynamic, it should probably loop through any existing
// children and remove them. We'll save that for later
cellCount = 0;
foreach (HeatSource _hs in HeatSource.mList) {
if (_hs.CompareTag("Player")) continue; // we don't want the player included in the list
// Use .AddChild instead of manually adding, parenting, etc
GameObject go = NGUITools.AddChild(_grid.gameObject,heatSourcePrefab);
go.name = _hs.name;
cellCount++;
mTargets.Add(go);
}
// Recalculate the grid since we just added a bunch of objects
_grid.Reposition();
// Calculate the new height of our scrollview and clamp it to a maximum
float newHeight = Mathf.Clamp((cellCount * prefabHeight),0f,maxPanelHeight);
Debug.Log("New Height: " + newHeight.ToString("F0") + " for " + cellCount.ToString() + " targets");
// Now first we reset the clipOffset
// See calculation below
float yOffset = (newHeight - prefabHeight) * 0.5f;
scrollPanelView
.clipOffset = new Vector2
(0,
-yOffset
);
// Now we reset the baseClipRegion to the new height
scrollPanelView
.baseClipRegion = new Vector4
(0,
0,panelWidth,newHeight
);
}
I added 2 more heat sources to my scene and sure enough the scroll list worked (and resized) just fine.
TLDR: Reset clipOffset BEFORE resetting baseClipRegion

One more (I was gonna say last but that's not true!) question:
Q: I'm going to have several of these dynamic scene-based scrollviews (lets say 4) with only one being "viewable" at a time. Is it better to MOVE them offscreen when they are not active or can I just ENABLE/DISABLE them?Q: Can I have 4 UIGrid objects inside my scrollview with only ONE active at a time?
It will end up like a small toolbar [aa] [bb] [cc] [dd] and depending on which button you click, the associated list of objects will be displayed.