Would need more info, like a test url or the response headers, specifically CF-Cache-Status indictating cache eligibly. Cloudflare has hundreds of locations each with their own cache, so could simply be hitting different locations, or your rule isn't matching. One thing that does stand out is the min edge cache ttl for free is 2 hours: https://developers.cloudflare.com/cache/how-to/edge-browser-cache-ttl/
Edge Cache TTL (Time to Live) specifies the maximum time to cache a resource in the Cloudflare global network. Edge Cache TTL is not visible in response headers and the minimum Edge Cache TTL depends on plan type.