I think your logic is correct. According to poolmath, running an RJ-60+ for 4 hours at 100% on a 20,000 gallon pool should increase FC by 3.1ppm. I could see it being off by a little. Maybe 3.0 or maybe even 2.5, but getting 1/3 of the expected output definitely seems like something is wrong.
Are you certain that it’s actually running constantly for those 4 hours. I wonder if it’s detecting low flow and not generating for part of the time, or if it’s detecting a high or low salt level, which would stop generation. How is it wired? If it’s connected to a timer is it possible that the timer is misconfigured or faulty? I’m wondering if somehow it’s actually just running for 1 hour and not 4 hours.