Cool. Progress!
Good to note that it is possible for manual dialed calls to take a different path than autodialed (in your campaign setup, manual dial prefix can cause this ...), and definitely easy for "direct dialing" calls to take yet another path.
If you call without "vicidial" being involved, your callerid will NOT be set by Vicidial and you should use a dialplan that will set your callerid for you. Creating a new dialplan specifically for that purpose (1NXXNXXXXXX on all three lines ... without the 9 ... and with EXTEN:1 or EXTEN instead of EXTEN:2) ... then your agents don't need to dial "9" before the phone number.
You should also try with EXTEN:1 in the dialplan you posted already to see if providing the "1" through to the carrier during outbound dialing has any effect (it shouldn't ... but this is open source programming, linux, and telephony ... so anything is possible and worth a try! LOL). FYI: the :2 removes the first two digits of the extension (variable ${EXTEN} is all the digits ... ${EXTEN:2} is with the first two digits removed, the 91)
Provide an asterisk CLI example of a "good" (callerid showed properly) vs a "bad" (no callerid). See if there is a noticeable difference (other than the number dialed, of course ... XXXX for the last four digits of the phone number dialed and .xxx the last digit(s) of the IP address to avoid posting any "personal" information if you fear for data privacy).
NOT 3000 lines of unrelated code. Test calls in a controlled situation (no other calls) and only from the inception of the call to the moment of "ring" (when you see the bad callerid ...). Anything beyond that is irrelevant and may stop a technician from bothering to read your actual necessary code, so leave it off for the best results.