One important think to note right away, is that pubKeyOutputsAt requires PubKeyHash as first argument, so pubKeyOutputsAt scptAddress ... won't type check, if script hash used as scptAddress (otherwise - naming is a bit misleading =) ). Script hash defines script address, and public key, which defines public key hash, used to derive a Cardano wallet address.
scriptOutputsAt ownHashis not equivalent to pubKeyOutputsAt pubKeyHash (note: pubKeyHashs for pubKeyOutputsAt, not scptAddress). pubKeyOutputsAt is values paid to a public key address by a pending transaction (when/if transaction succeeds). scriptOutputsAt is basically the same, but for scripts - values paid to a script address (defined by hash) by current transaction. So scriptOutputsAt ownHash will get you Value that will be paid to the current script (the script that does current validation) when transaction succeeds.
valueLockedBy uses scriptOutputsAt under the hood, applying one extra step to accumulate total Value (i.e. go from [(DatumHash, Value)] to just Value summing values from list). So it will give you total Value that will be paid to a script (and locked by that script). So valueLockedBy (scriptContextInfoTx ctx) ownHash is not the total Value of UTxOs that currently locked by the current script, but total Value of UTxOs which will be produced by this transaction and will be locked at the current script when transaction succeeds.
So, (valueLockedBy (scriptContextInfoTx ctx) ownHash) and fold $ pubKeyOutputsAt pubKeyHash (scriptContextInfoTx ctx) are not the same in principle, as former uses script hash, and latter - public key hash , giving value for different kinds of addresses.