Good evening Gary.
1.- With regard to session control you can also implement with htable module (avoiding orphan dialog module).
INVITE transaction
$sht(channels=>$ci) = $avp(s:caller_uuid);
BYE/on_failure transaction
$sht(channels=>$ci) = NULL;
CHANNEL CONTROL ROUTE ->
.
if ( $shtcv(channels=>$avp(s:caller_uuid)) >= "YOUR TOP") ) {
..
Your treatment
2.- My last way is to face dialog module development to achieve your goals, even service restart.
The problem is that dialog module is now continuously changing (dialog, dialog_ng, . ) and you'll have to accomplish your development with new changes.
Regards.