Why does SQL Server Profiler show some completed statements in pairs (twice)?
My question: Is SQL Server actually running the queries twice?

Yep!  Given that the SPIDs are different, that means they were run from completely different connections.  The fact that the duration and reads are different, as you mentioned, is also a good indicator that the query was run twice (possibly with different parameters).

If yes, does this mean definitely the client is sending the query twice?

I would say yes.  You should look into your application code.  Maybe more than one user was accessing the system at the same time, or the query is being run from multiple threads, or something else.
Since this is EF, I might think this was the N+1 query problem (disclosure: that's my blog), but that would normally be all on the same SPID.