There is not a single rule of thumb that can be stated for this as which value you need to use is totally dependent upon the business requirement you have.
Generally, it is advisable to use internal value in configuration-related modules. For example- Workflows, Relationships so that going forward if you are creating another synonym value of any internal status, there is no need for you to revise them each and every time.
Tricky part can be On-Demand/Ad Hoc reports because you might have a case where you want to show data for 1 custom status only. For example- COMP has 2 custom statuses TECHCOMP & QACOMP and you want to show only data related to TECHCOMP in your report then you can't use internal value but in case you are showing both values for a given example then you can use internal value.
Also, another thing to be considered is how big is your domain list. Sometimes the customer has a very big list and for different configuration, it is practically impossible to write queries using IN () clause using custom value so they end up writing NOT IN () using internal values. Hope this makes sense.
------------------------------
Prashant Sharma
EAM360
https://www.linkedin.com/in/psharmamaximo/------------------------------