Is there any way to tell for sure whether this transaction was mined in secret or was broadcast to the network prior to being mined?
The only reliable way is to run a modified full node that first removes the limit on its mempool size and also has a good connectivity to the rest of the nodes and is running for more than a day. Then that node would mark transactions that aren't in its mempool but are in a block so that they can be analyzed. These transactions could include the payment of the pool to its miners which they don't broadcast (and usually has a zero fee) but also these shady looking transactions.
This is something a blockchain analysis company could do.
This is not guaranteed to determine if a transaction was not broadcast prior to being included in a block.
Someone could mine block
n at timestamp
x that includes a previously unbroadcast transaction, broadcast said transaction at timestamp
x, and broadcast block
n at timestamp
x + 6 seconds. This would put the chances of another pool including the transaction in another block at around 1%. This chance could be reduced by the delay in broadcasting the block is reduced.
A pool could also broadcast a found block only to a select number of other mining pools, and broadcast the transaction at the same time, but via many very well-connected nodes.
As for the 1st scenario, a poll could charge a 10% fee for including this transaction, and refunding the transaction fee, and could still offer this service profitably if they don't end up being the one confirming the transaction 1% of the time.