I know for a fact that it is possible to render the email context without sending it, using the Messaging class' method renderEmailTemplate. This is great for getting the message content rendered, but I'm talking about the message's subject only, not its content.

Use case is: create a case, and with it send an email to the customer (that way the email sent already has a thread Id, and Salesforce can act as an email server*). Customer wants the Case Subject field filled with the same string which is sent in the email template (tricky part here is that the subject can vary, since it is using a visualforce template).

Since I'll be using Apex anyway, I might just ask: would it be easier to create a piece of code on the case's trigger to fill this field?

Note: If you want the subject updated only the first time, you can use the after-insert trigger to update the records. You are allowed a single recursive update after insert to perform an update, but you cannot perform an update on a record in after-update.

N.B. You will want to limit yourself from doing mass inserts if you do this; each Messaging.renderStoredEmailTemplate will use at least one query, so this falls under the "query in a loop" anti-pattern.