@Andrew Hawes Thank you for reaching out.
You mentioned that you are using Azure SQL Serverless database.
When there are no requests to an Azure SQL Serverless database for an extended period, the database is put into a paused state to save cost. More details are here
The first request to a database in a "paused state" will "resume" the database first and then perform a query operation. This usually results in an increased response time.
I suspect this to be the issue in your case.
To check the Auto-Pause configuration, please navigate to the Overview blade for your database on the Azure portal.
Serverless database is a great choice for burst workloads where you can predict the utilization patterns and can afford the latency in resuming from a paused state.
Otherwise, you should switch to a provisioned pricing tier instead.
Please let us know if you have any further questions.
----------
If an answer is helpful, please "Accept answer" or "Up-Vote" which might help other community members reading this thread.