- Version control. Given a terminal (or Explorer with TortoiseSomething) and an existing project, make some simple changes and commit.
- Testing. Given a simple piece of code, its tests and either a bug report or feature request, explain at least in high level terms how to move forward.
- Code review. Give constructive feedback on how to improve any aspect of a diff.
These tasks indicate an understanding of code and facility with communication beyond the very basics, and you'll never finish learning them, so I believe they are appropriate for any non-entry level position. They are also sufficiently open ended that the candidate has to prioritize getting at least something done on all of them.
After that, unless they are completely hopeless I'd arrange coffee or lunch (on company money of course) with at least part of the team they'd be working with, so they can tell if they are at all compatible.
Needless to say, give the candidate plenty of options for a suitable time, let them know exactly how long it'll take, coordinate the time with the team, show up on time with a computer—which the admin team has wiped and you've just had to copy a few files onto—and find somewhere quiet and comfortable for them to work.