Simple mistakes, but 4 of them.
1. You need to use NGUITools.AddChild, not Instantiate. It sets the parent object right away, as well as the game object's layer and a few other things. Look inside that function to find out more.
2. You were setting the right anchor's relative value to 0 instead of 1. 0 is 'left'. 1 is 'right'. So both left and right were effectively the same thing.
3. You should be modifying the anchors, not doing a "new UIRect.AnchorPoint".
4. You never called ResetAnchors() and UpdateAnchors(). Look at UIRect.SetAnchor. Note how it calls those at the end?
Here is your PopulateList() function, fixed and optimized.
void PopulateList()
{
for(int i = 0; i<NumToAdd;i++)
{
GameObject newListItem = NGUITools.AddChild(TheGrid.gameObject, ThePrefab);
UIWidget newListItemsWidget = newListItem.GetComponent<UIWidget>();
newListItemsWidget.leftAnchor.Set(TheScrollView.transform, 0f, 0f);
newListItemsWidget.rightAnchor.Set(TheScrollView.transform, 1f, 0f);
newListItemsWidget.ResetAnchors();
newListItemsWidget.UpdateAnchors();
}
TheGrid.Reposition();
TheScrollView.ResetPosition();
}