Try using the bsexec command with launchctl, typically this behavior is due to how the every* (i.e. every15) policies run (via launchd) and so you need to get out of that context. Either way this may help with Casper Remote as well.
#!/bin/bash
declare -x UserName="$(/usr/bin/who | /usr/bin/awk '/console/{print $1;exit}')"
echo "Derived Console username: $UserName"
declare -x LoginWindowPID="$(/bin/ps -axww | /usr/bin/grep loginwindo[w] | /usr/bin/awk '/console/{print $1;exit}')"
echo "Found PID: $LoginWindowPID"
/bin/launchctl bsexec "${LoginWindowPID:?}" /usr/bin/sudo -u "$UserName" /usr/bin/open /Applications/Calculator.app
https://gist.github.com/2210258
Just a note on @jarednichols comment, that should typically work as well, however be aware that is running the process as the root user if you omit the "open" and would block the procedural execution of your script until the app is complete. Leaving the open should not be much different then /Applications/Calculator.app , as in a way both basically execute the same process.