Really, you need to ask your CDN about this. For example, your CDN service might only retain cache on a specific edge for a month (or more, or less), unless it is re-requested. Also, how many EDGE cache servers do they have? If they have 12 server for example, 12 requests from different locations, might not yield cache result. For example, Cloudflare CDN (although it doesn't work exactly like other CDN's) have more hundreds of edge servers ... They will only store data on an edge server for a certain amount of time, until it gets removed from server, as it's considered outdated.
Perhaps your low yield results are for something that shouldn't get cached? Hard to say. Most important is that it caches images for a long time.
The only thing you can do is start reviewing headers. Here is a raw image served by X3:
https://gallery.kog.it/content/2.200120 ... 0901/1.jpg
Let's check the response headers:
X3 is definitely serving the correct cache headers that you want:
X3 response headers wrote:cache-control: max-age=315360000
expires: Mon, 09 Jul 2029 15:26:27 GMT
last-modified: Mon, 13 Apr 2015 11:23:26 GMT
Now, your CDN will "pull" images from the above, and should inherit the headers, unless you overwrite them from your CDN settings. Here is the same image from CDN:
https://kgallery.b-cdn.net/content/2.20 ... 0901/1.jpg
You would have to try to load that image from multiple locations every, for example using
https://www.webpagetest.org/, and checking if you get HIT response or not for all. If not, it is emptying the cache, but for what reason? Only your CDN provider can answer that.