If you don't have access to a dyno and you have a straight, flat, SAFE bit of road, you can try this:
I'm not saying this will work or be reliable, but could be a last resort kind of thing. Any wind or variation in how you start your runs will all but nullify your results. Other assumptions: same gear, no wheel spin, fueling and EGTs are sorted.
Lower your overall timing well below what you know to be good, noticeable power (within reason). Do several identical runs to get a baseline. Add an extra column next to RPM, then subtract the previous row RPM from current row RPM to get the RPM difference for each row. Better yet, I believe there is a RAM variable for diff in RPM you can log. Graph rl, RPM, RPM difference, and timing out by time (x-axis) or just graph rl, RPM, and timing by RPM. The latter will not require fooling around with resetting the timestamp per run. To graph by time you have to zero out time at the precise beginning of ever run in the data (add extra Timestamp column), so that each run lines up on the same graph. Here is where you'll find out if this method is even possible by how consistent or not consistent your results are between runs. Assuming they are somewhat consistent, then continue.
Logging at least RPM,rl_l, and timing out, bump timing in a small, 1-2 node rpm area you know gets touched during your runs. Bump it a noticeable amount (again within reason). Then do a few more runs. Here is another point where you'll find out if this method is doable. If you can clear see a bump in the
RPM difference lines around the RPM area where you made your change, then you might be able to use this method.
Now just continue to adjust, run, log, graph until the RPM difference lines no longer increase (or less of an increase) for a timing increase. Then back timing off a little at that point.
Simplified example:
With RL logged, you can extrapolate where timing changes had an effect. You could play around with RPM diff by diff'ing the row after or the row before to see which way matches more closely with your changes.
Looking at the two graphs, it would seem graphing by RPM gives a false negative after a bump in power. So, maybe graphing by time with the extra data conditioning step is better.
This is all theoretical and may not work at all. Maybe difference in power via RPM difference isn't big enough to distinguish from normal variations between runs. I haven't tried it.