Thanks for the response. I’ll try and explain the issue better.
Here are three 10x10 planes with the texture tiled at 0.7x0.7. You can see the seam between the 3 objects and the seam because the textures do not match (The edges do not match because texture tiling is 0.7 and the UV map is 1.0 wide)

However if I make it one 30x10 object instead of three 10x10 objects there is no seam. This shows the texture itself is seamless. (Tiling set to 2.1x0.7) 
If I take my 3 10x10 planes objects and instance the materials and offset the textures I can remove the seam. The amount of texture offset required is based on world position, size, texture tiling. Code used to do this is shown below. It’s worth mentioning that the mesh UV map could also be shifted to fix this issue (I think shifting the UV map is probably a better method than instancing and changing material.offset). 
If I use one 30x10 Terrain object I do not have a seam. It looks good. TerrainLayer Size is set to 15x15 (which is basically the same as inverting the previous material tiling value of 0.7x0.7 for a 10x10 size plane)

However if I use three 10x10 Terrains I get a seam. The Terrains are part of the same Terrain Group and also share the same TerrainLayer. 
Hope that clarifies the issue. Thanks for reading.
I think there are a few ways to fix the seam issue.
1: Instance the Material/TerrainLayers and adjust the offset (the code below does this for a mesh and plane)
2: Shift the UV map (this is probably more efficient and the better way to do it?)
3: Choose a Terrain size that is a multiple of the TerrainLayer.size. For example if the TerrainLayer.size is 15x15 then the Terrain size could be 15x15, 90x90, 105x105, or 150x150 but NOT 100x100. (this is a bandaid and doesn’t work well considering every TerrainLayer would have it’s own size and a least common multiple would be needed).
I can bug report or upload a sample project to replicate the Terrain seam issue if you want.
CODE DESCRIPTION
For a texture tiling of 0.7x0.7 this code instance the material and change the material.tiling to…
tiling=0.7x0.7 for a 1x1 size plane
tiling=1.4x.1x4 for a 2x2 size plane
tiling=2.1x0.7 for a 3x1 size plane
…and it also adjusts the material.offset such that for a 1x1 size plane the
offset=0, 0 for a position of 0,0
offset=0.7, 0 for a position of 1,0
offset=1.4, 0 for a position of 2,0
protected sealed override void ScaleMaterialsRuntime()
{
MeshRenderer meshRenderer = transform.GetChild(0).GetComponent<MeshRenderer>();
Vector2 tiling_Main_1x1 = tilingFudgeFactor * meshRenderer.material.GetTextureScale(KeyPropertyMaterialTexture.KeyTextureAlbedo.propertyID);
Vector2 tiling_Secondary_1x1 = tilingFudgeFactor * meshRenderer.material.GetTextureScale(KeyPropertyMaterialTexture.KeyTextureDetailAlbedo.propertyID); //new 2020_12_03 //even if the material doesn't have a detail/secondary map Albedo (i.e. only a normal map) this will still access the scale
Vector2 localScale2D = new Vector2(transform.localScale.x, transform.localScale.z); //only X and Z, floors have no height
Vector2 tiling_Main_New = new Vector2(tiling_Main_1x1.x * localScale2D.x, tiling_Main_1x1.y * localScale2D.y);
Vector2 tiling_Secondary_New = new Vector2(tiling_Secondary_1x1.x * localScale2D.x, tiling_Secondary_1x1.y * localScale2D.y); //new 2020_12_03
meshRenderer.material.SetTextureScale(KeyPropertyMaterialTexture.KeyTextureAlbedo.propertyID, tiling_Main_New);
meshRenderer.material.SetTextureScale(KeyPropertyMaterialTexture.KeyTextureDetailAlbedo.propertyID, tiling_Secondary_New); //new 2020_12_03
Vector2 posCenter = new Vector2(transform.position.x, transform.position.z);
Vector2 posLL = posCenter - localScale2D / 2f; //since UV map starts at LowerLeft
Vector2 offset_Main_New = new Vector2(posLL.x * tiling_Main_1x1.x, posLL.y * tiling_Main_1x1.y);
Vector2 offset_Secondary_New = new Vector2(posLL.x * tiling_Secondary_New.x, posLL.y * tiling_Secondary_New.y); //new 2020_12_03
meshRenderer.material.SetTextureOffset(KeyPropertyMaterialTexture.KeyTextureAlbedo.propertyID, offset_Main_New); //new 2020_12_03
meshRenderer.material.SetTextureOffset(KeyPropertyMaterialTexture.KeyTextureDetailAlbedo.propertyID, offset_Secondary_New); //new 2020_12_03
meshRenderer.material.SetTextureOffset("_BumpMap", offset_Main_New);
}
//Note this code won’t work exactly if you copy and paste it (it uses some other scripts of mine) but it should show the idea behind adjust texture tiling and offset based on world position and size to eliminate seams.