So I arrived at a solution. It's super ugly (code wise).
I wrote a string of helper functions to get it working. It all of course is dependent on storing the pending bar in TradeVar as you previously indicated. The code is also dependant upon myID, a custom trade identifier as pending trades have no identifier until they are opened.

Here's the helpers and the plot block (which is now called at the end of every bar, directly, in run():
Code:
//check if a trade with status typ 
bool tradesThisBar(string typ, int idx) 
{
	int n = 0;
	
	for(all_trades){
		if(strstr(typ, "Op")) {	//looking at open trades
			if(TradeBarOpen == idx) n++;
		}
		if(strstr(typ, "Cl")) { //looking at closed trades
			if(TradeBarClose == idx) n++;
		}
		if(strstr(typ, "Pd")) { //looking at pendings only
			if(PdBar == idx) n++;
		}
	}
	if(n >= 1) return true;
	else return false;
}

//get the bar index of a trade with status typ and myID id
int getTradeBar(string typ, int id)
{
	int n = -1;
	
	for(all_trades){
		if(strstr(typ, "Op")) {	//looking at open trades
			if(id == myID) n = TradeBarOpen;
		}
		if(strstr(typ, "Cl")) { //looking at closed trades
			if(id == myID) n = TradeBarClose;
		}
		if(strstr(typ, "Pd")) { //looking at pendings only
			if(id == myID) n = PdBar;
		}
	}
	if(n >= 0) return n;
	else return -1;		
}

//get myID for a trade with activity typ at bar idx
var getTradeMyID(string typ, int idx)
{
	int n = -1;
	
	for(all_trades){
		if(strstr(typ, "Op")) {	//looking at open trades
			if(TradeBarOpen == idx) n = myID;
		}
		if(strstr(typ, "Cl")) { //looking at closed trades
			if(TradeBarClose == idx) n = myID;
		}
		if(strstr(typ, "Pd")) { //looking at pendings only
			if(PdBar == idx) n = myID;
		}
	}
	if(n >= 1) return n;
	else return -1;	
}

//get price typ for trade with myID id
var getTradePrice(string typ, int id)  //generalised version of  getPendingPrice
{
	var n = -1.0;
	
	for(all_trades){
		if(strstr(typ, "Op")) {	//looking at open trades
			if(id == myID) n = TradePriceOpen;
		}
		if(strstr(typ, "Cl")) { //looking at closed trades
			if(id == myID) n = TradePriceClose;
		}
		if(strstr(typ, "Pd")) { //looking at pendings only
			if(id == myID) n = TradeEntryLimit;
		}
	}
	if(n >= 0) return n;
	else return -1;	
}

function run()
{
...
//mark where pending trades were placed
	if(tradesThisBar("Pd", Bar)){
		int id = (int)getTradeMyID("Pd", Bar);	
		plotGraph("pdbar", 0, getTradePrice("Pd", id), CROSS, CYAN);
	}
	
	//join the pending price/bar to the open price/bar
	if(tradesThisBar("Op", Bar)){
		int id = (int)getTradeMyID("Op", Bar);
		if(id <= 0) return;					//leave the function if no trade id was found
		
		//sanity check >> are values being retrieved properly
		//printf("nTrade: %i, PendingBarPrice: %i/%.5f, OpenBarPrice: %i/%.5f", id, getTradeBar("Pd", id), getTradePrice("Pd", id), Bar, getTradePrice("Op", id));
		
		plotGraph("pdline", -(getTradeBar("Pd", id)-Bar), getTradePrice("Pd", id), LINE, CYAN); //pending point
		plotGraph("pdline", 0, getTradePrice("Op", id), LINE|END, CYAN); //open point
	}
}



This code feels like it's taking the long way around. Is there a better way to do this such as official lite-c functions or just half-way decent programming?
It does the job but seems very very crude smirk

Cheers,
BobbyT

PS: As this is 'working' now can I re-ask about asset:algo plots? I'd like to generate a separate plot for each asset:algo combination.

I can see how the above functions could be adapted to do such a thing (I think) but from what I gather, Zorro, will only generate 1 plot per simulation. In multiasset strategies, new plots can be attained by selecting the asset in the Asset box and pressing results. I played with this and it works as the manual states.

But this begs the question, how can one create a separate plot for each algo?