1)
die regel, dass sprites mit höherer z koordinate oben liegen, gilt nur für die sprites im selben viewport.
für sprites in unterschiedlichen viewports gilt, dass das sprite mit dem höheren viewport oben liegt.

du kannst dir ein viewport eigentlich wie ein sprite vorstellen und die sprites im viewport sind das bitmap.

2)
das src_rect eines sprites ist immer vorhanden und die information in src_rect wird in Graphics.update IMMER zum rendern verwendet. die zusätzliche arbeit für die CPU ist also nur das ändern der rect daten (und 4 zahlen ändern benötigt kaum rechenleistung)
wenn du jedoch per blocktranfer arbeitest muss die cpu zusätzlich das bitmap bearbeiten (und zwar jedes pixel einzeln kopieren - das ist rechenleistung im vergleich zu 4 zahlen).

die zusätzliche arbeit, die durch das weitere sprite im 1. fall verursacht wird, wird soweit ich weiß von der gpu berechnet und die hat bei nem 2d spiel eh zu wenig zu tun ._.