#1: Do *not* create condition-specifc blocks. You do not need them. With the conditional <include> elements, all you switch out are the things that are *different* for each condition / set, mainly the items. Take a look at this minimal example
https://www.millisecond.com/forums/FindPost19046.aspx . Notice that the "main" script has all the trials and blocks in it. The only thing that gets included conditionally is a different set of items, here based on the subject number.
#2: You should consolidate all the items into a single <item> element. Then select the different sub-sets (A_Flat_1, etc.) based on their item numbers only. You encode those item numbers in <list>s. You set those lists to sequential selection, and -- at the start of a block -- chose one of the lists at random. Similarly, you record that random list order from the 1st part (e.g. A) in another list. You then use the latter list to reproduce the same order in the 2nd part (e.g. B).
<values>
/ selectedlist = 1
</values>
<expt>
/ blocks = [1-2 = pt1_block; 3-4 = pt2_block]
</expt>
//blocks
//part 1 (e.g. A)
<block pt1_block>
/ onblockbegin = [values.selectedlist = list.pt1_listorder.nextvalue;
list.pt2_listorder.appenditem(list.pt1_listorder.currentvalue);]
/ trials = [1-4 = pt1_trial]
</block>
//part 2 (e.g. B)
<block pt2_block>
/ onblockbegin = [values.selectedlist = list.pt2_listorder.nextvalue;]
/ trials = [1-4 = pt2_trial]
</block>
//part 1 trial
<trial pt1_trial>
/ stimulusframes = [1=pt1]
/ validresponse = (57)
</trial>
//part 2 trial
<trial pt2_trial>
/ stimulusframes = [1=pt2]
/ validresponse = (57)
</trial>
<text pt1>
/ items = pt1_items
/ select = list.pt1_itemnumber.nextvalue
</text>
<text pt2>
/ items = pt2_items
/ select = list.pt2_itemnumber.nextvalue
</text>
<item pt1_items>
/ 1 = "A_Flat_1_Item_1"
/ 2 = "A_Flat_1_Item_2"
/ 3 = "A_Flat_1_Item_3"
/ 4 = "A_Flat_1_Item_4"
/ 5 = "A_Flat_2_Item_1"
/ 6 = "A_Flat_2_Item_2"
/ 7 = "A_Flat_2_Item_3"
/ 8 = "A_Flat_2_Item_4"
</item>
<item pt2_items>
/ 1 = "B_Flat_1_Item_1"
/ 2 = "B_Flat_1_Item_2"
/ 3 = "B_Flat_1_Item_3"
/ 4 = "B_Flat_1_Item_4"
/ 5 = "B_Flat_2_Item_1"
/ 6 = "B_Flat_2_Item_2"
/ 7 = "B_Flat_2_Item_3"
/ 8 = "B_Flat_2_Item_4"
</item>
//select a list at random for part 1
<list pt1_listorder>
/ items = (1,2)
/ selectionmode = random
/ replace = false
</list>
//records the random list order from part 1
//reproduces the same list order in part 2
//via sequential selection
<list pt2_listorder>
/ selectionmode = sequence
</list>
//returns the item # numbers for the selected list in the block
//part 1 (e.g. A)
<list pt1_itemnumber>
/ items = (list.flat_1.nextvalue, list.flat_2.nextvalue)
/ selectionmode = values.selectedlist
</list>
//returns the item # numbers for the selected list in the block
//part 1 (e.g. B)
<list pt2_itemnumber>
/ items = (list.flat_1.nextvalue, list.flat_2.nextvalue)
/ selectionmode = values.selectedlist
</list>
//flat 1 item #s are 1 to 4
<list flat_1>
/ items = (1,2,3,4)
/ selectionmode = sequence
</list>
//flat 2 item #s are 5 to 8
<list flat_2>
/ items = (5,6,7,8)
/ selectionmode = sequence
</list>