A ConfigMap or Secret mounted as a whole volume is refreshed by the kubelet in the background, with the propagation delay bounded by the kubelet sync period plus the local cache TTL, typically around a minute by default. The update works because the kubelet atomically swaps a symlink for the mounted directory.
A mount that uses subPath to place a single file at a specific path does not get that symlink indirection. It is a bind mount of one file made at container start, and it never updates for the life of the container. This is documented behavior, not a bug, and it is the most common reason a configuration change appears not to take effect.
Either mount the whole ConfigMap into a directory and have the application read from there, or accept the immutability and force a rollout on change. The usual pattern for the second option is to hash the ConfigMap contents into a pod template annotation so any change produces a new pod spec and a rolling update. Note that even a whole-volume mount only updates the file; the application must watch it or be signaled to reload.