Is the change address always at the same position in the vout array of a raw transaction? When using the sendtoaddress command, does the Bitcoin client automatically place the change address at vout array position 0?
I would assume so, because bitcoin works through a sequence of procedures.
No, it picks a random position.

The purpose is to make it hard for people observing the blockchain to know which is change and which is the payment, as that would make tracing easier. This is also the reason why change outputs use new keys to send to.

Note that there has been a bug for a long time that made it always end up in the same position. It was fixed over a year ago, IIRC.