I found that adding
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
To the bottom of my htaccess file (below all rewriterule) solved my issue (HTTP_IF_MODIFIED_SINCE was not being set) with caching dynamic generated images. Brilliant.
Although what does this actually do and why it is needed? Is it necessary I have this in every .htaccess or can I change the apache server config so I dont have to add this to every website project?
If-modified since is an HTTP packet header ENV variable which basically sets a time in which if a client has visited a server, and the content which the client is requesting has changed then the server will return the changed content, else it will return a 304 not-modified response without the documents content.