So from the following code:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<packaging>jar</packaging>
<properties>
<java.version>21</java.version>
<maven.compiler.source>23</maven.compiler.source>
<maven.compiler.target>23</maven.compiler.target>
The upgrade is definitely persisted in the XML. I'm interested to know what the Heroku server config is. It's possible there is a mismatch between your local config and your remote config.
Also, did you notice any differences in your lock file?