When to use UpdateApplication

As far as my understanding goes, transactions of type UpdateApplication is primarily for changing the actual TEAL of a smart contract.

However I have also seen UpdateApplication used for adding a new global state value https://developer.algorand.org/articles/linking-algorand-stateful-and-stateless-smart-contracts/:

// check if this is update ---
int UpdateApplication
txn OnCompletion
bz not_update
// the call should pass the escrow 
// address
txn NumAppArgs
int 1
bz failed
// store the address in global state
// this parameter should be addr:
byte "Escrow"
txna ApplicationArgs 0
int 1

Is there a particular reason for using UpdateApplication to store state, as opposed to just using the generic application call?

In this particular scenario, it looks like you are linking an escrow(stateless) contract to a stateful contract. You may want that operation to only occur if the creator of the stateful contract is making the link. So an update operation is ok although it really does not matter as long as you know which account is making the change. Take a look at this article:

Also note in Teal3 coming in a week or so you can now get the creator address from teal in a stateful contract: Developer Office Hours | TEAL 3 Updates - YouTube