Is timestamptz preferred when timezone logic is performed by the client?
Is timestamptz still preferred if the application always inserts/reads UTC and converts to local datetime itself?


Well, no. Then it's very slightly simpler / faster to use timestamp.

But is "the application" the only client accessing the database? And is it going to stay this way for the lifetime of the DB?

If doubts remain, I would still use timestamptz, it's the safe choice. You already found my related answer on SO I would suggest as reference for basic information:


Ignoring time zones altogether in Rails and PostgreSQL 


Also, timestamptz literally is the "preferred" type among "Date/time types" in Postgres (tagged typeispreferred in pg_type), which can make a difference, but probably not to your particular question, even though the question title almost sounds like you might be asking for that. Related:


Generating time series between two dates in PostgreSQL