There's a little buglet in #85387 (which was the PR that closed #84046), specifically, it doesn't account for the possibility that there's both a default/request **and** and a final pipeline, and that they can both touch the `@timestamp` field.

`IngestService#postIngest` was added in #85387, and it's intended that the logic there only runs **once**, after all the pipelines associated with the request have been executed. But as it's currently written, the logic actually runs after each individual pipeline runs.

The consequence of that is that if there's a default/request and a final pipeline in use for a document, and the final pipeline changes the timestamp field, the `rawTimestamp` recorded for the `IndexRequest` associated with the document will mistakenly use the value it sees after the default/request pipeline runs, and **not** the most correct one (from after when the final pipeline runs).

/cc @martijnvg 
server/src/main/java/org/elasticsearch/ingest/IngestDocument.java
* If the path value is a string, a base64 decode operation will happen.
     * If the path value is a byte array, it is just returned
     * @param path The path within the document in dot-notation
     * @param ignoreMissing The flag to determine whether to throw an exception when `path` is not found in the document.
     * @return the byte array for the provided path if existing
     * @throws IllegalArgumentException if the path is null, empty, invalid, if the field doesn't exist
     * or if the field that is found at the provided path is not of the expected type.
     */
    public byte[] getFieldValueAsBytes(String path, boolean ignoreMissing) {
        Object object = getFieldValue(path, Object.class, ignoreMissing);
        if (object == null) {
            return null;
        } else if (object instanceof byte[] bytes) {
            return bytes;
        } else if (object instanceof String string) {
            return Base64.getDecoder().decode(string);
        } else {
            throw new IllegalArgumentException(
                "Content field [" + path + "] of unknown type [" + object.getClass().getName() + "], must be string or byte array"
            );
        }
    }
    /**
     * Checks whether the document contains a value for the provided templated path
     * @param fieldPathTemplate the template for the path within the document in dot-notation
     * @return true if the document contains a value for the field, false otherwise
     * @throws IllegalArgumentException if the path is null, empty or invalid
     */
    public boolean hasField(TemplateScript.Factory fieldPathTemplate) {
        return hasField(renderTemplate(fieldPathTemplate));