I would guess so. Reverse calculation of your gross rate from your achievable goodput for TCP/IPv4 (likely what your test used) implies:
91 * ((1500-8+46) / (1500-8-20-20)) = 96.40 Mbps
so setting the shaper to 100 Mbps is likely to result in bufferbloat.
My rule of thumb is: run a few speedtest so you get a feeling which goodput you can reliably get, and then use that as gross shaper rate for sqm/cake. Yes, this will mean your shaper has some slack, but at that is generally a good idea to not set a traffic shaper to 100% of the true bottleneck rate...
That is the amount of bufferbloat you are willing to accept/tolerate; this is a local policy decision you need to take for your network (taking into account what is possible to achieve).
Personally, as a first quick and dirty method I tend to use any reliable speedtests (like speedtest.net, or https://www.waveform.com/tools/bufferbloat, fast.com) to load my link all the while running
gping 8.8.8.8 9.9.9.9 --buffer 60
to visualize the latency to two typically well-connected DNS-servers. The goal is to not see intolerable RTTs during the tests up- and download phases compared to the idle phases.
That is hardly a scientific test (for those I use flent, but for flent you need publicly available netperf servers, which are hard to come by).
Alternatively you could use Apple's networkQuality tool (if you use Apple Monterey) or the go-responsiveness version of networkQuality which you would need to build yourself.
time ./networkQuality --config mensura.cdn-apple.com --port 443 --path /api/v1/gm/config --sattimeout 60 --extended-stats --logger-filename go_networkQuality_$(date +%Y%m%d_%H%M%S)
which result in output like:
08-24-2022 20:52:45 UTC Go Responsiveness to mensura.cdn-apple.com:443...
Creating a CSV data logger: go_networkQuality_20220824_225245-self-08-24-2022-20-52-45!
Creating a CSV data logger: go_networkQuality_20220824_225245-foreign-08-24-2022-20-52-45!
Creating a CSV data logger: go_networkQuality_20220824_225245-throughput-download08-24-2022-20-52-45!
Creating a CSV data logger: go_networkQuality_20220824_225245-throughput-upload08-24-2022-20-52-45!
Download: 7.369 Mbps ( 0.921 MBps), using 20 parallel connections.
Upload: 2.748 Mbps ( 0.344 MBps), using 16 parallel connections.
RPM: 249
Extended Statistics:
Maximum Segment Size: 1440
Total Bytes Retransmitted: 5632
Retransmission Ratio: 9.47%
Total Bytes Reordered: 2016000
Average RTT: 768.9375
real 0m13.331s
user 0m0.464s
sys 0m0.442s
The reported rates should be around your true rates as seen in other speedtesrs, and the RPM value tells you how responsive your link is, RPM really is just a different way to show the latency under load, but since it is the reciprocal (RPM [1/min] = 60000/(RTT [ms]; 60000/RPM[1/min] = RTT [ms]) RPM gets larger the less latency under load you experience (lower latency under load typically is considered better).