Child is ignoring parent position.

If I instantiate objects with a sprite renderer:

var piece = (GameObject) Object.Instantiate(PiecePrefab, new Vector3(j*boxSize,i*boxSize,0), Quaternion.identity);
			piece.transform.parent = transform;

and the parent was in a non zero position, lets say, (-7, 0, 0) then it’s children acts like their parent are at the (0,0,0).

BUT, if I get to move the parent AFTER the instatiations, like these:

    void Start () {
    		transform.position = new Vector3(-6.5f, 0, 0);

they get propperly moved, why?

This is happening because the Instantiate function will spawn the prefab relative to world space and set its position before you assign it as a child. So when you assign it as a child, all that happens is transform.localPosition is changed relative to the parent. What you would want to do is something like this:

var piece = (GameObject) Object.Instantiate(PiecePrefab);
piece.transform.parent = transform;
piece.transform.localPosition = new Vector3(j*boxSize,i*boxSize,0);

This will spawn the object. Set it as a child of the object running the script. Then set its position, relative to its parent.