I guess this is still unsolved since, as I understand, you are looking for a dynamic way to pre-filter the value list but with the possibility to "restore" the original where clause if preferred.
Instead of init my approach would be to create a script on the Retrieve list-event for object COMMLOG and attribute TEMPLATEID. My script will then be executed when using lookup for this specific field or getlist-event through rest api etc. Therefore it's important to make sure that you always return a value from this type of script since Maximo will expect your script to take fully responsibility for this when activated.
My script written in jython:
from psdi.mbo import TranslateCacheFactory
translate = TranslateCacheFactory.getInstance().getCache()
owner=mbo.getOwner().getName()
whereclause="objectname='" + owner + "' and status in (" + translate.toExternalList("COMMTMPLTSTATUS", "ACTIVE") + ") and ((usewith in (" + translate.toExternalList("TEMPLATEUSEWITH", "APPS") + ")) or (usewith in (" + translate.toExternalList("TEMPLATEUSEWITH", "ALL") + ")))"
commList = mbo.getMboSet("tempcom","COMMTEMPLATE",whereclause)
wcs = service.webclientsession()
if wcs:
if wcs.getCurrentApp().getId().lower() == "wotrack":
pid=mbo.getUserInfo().getPersonId()
if not mbo.getMboSet("tempperson","PERSON","personid='"+pid+"' and droppoint = 'TRANSIT'").isEmpty():
commList.setQbe("TEMPLATEID","TR%")
listMboSet=commList
In action giving you,

What it does:
- Includes TranslateCacheFactory and are able to use toExternalList method
- State base where clause based on how Maximo originally limits templates available - making sure to only present those related to actual object or general (ALL)
- Prepare the mboSet with this where clause and set the "base"
- Make sure webclientsession is available before use, could be null when triggered from integration
- If in right context (wotrack in my example) then check person setup
- If cgdivision, then setQBe to TR%
Hopefully this gives you a good starting point. Since I don't have the exact prerequisites you may need to change some things. Such as the reference to the app id and cgdivision.
To really be on the safe side an outer check to make sure variable owner is available (gets an value) could be added, and if not where clause for "commList" could be 1=1. This way you make sure that there's always data being returned. Good luck!