"It's a little surprising that it can only be constructed with an unacquired mutex."
That comment is confusing or perhaps even wrong: the scoped_lock does what you think it should do (potentially block until the current owner releases the mutex).
Maybe the "not" should be removed, meaning that after construction it is 'in the "have acquired a mutex" state'? Maybe the "should" should be 'would', meaning that the "acquire()" call is safe at that point? I don't know.
It does seem peculiar that there's no check for NULL!=my_mutex to protect against misuse. This constructor would then also have to initialise my_mutex to NULL before calling acquire(), but at least you get early failure if you call acquire() on a lock that's already locked, at negligible cost.
I agree the comment is misleading. It is appropriate for the method acquire() but not for the constructor of the scoped_lock class.
And of course Raf is right that the constructor will do just what you expect.