There's a number of characters in file names that would make that fail. You can improve it with:
#! /bin/sh -
cd /home/pi/JPGS || exit
fn=$(ls -t | head -n1)
mv -f -- "$fn" /home/pi/WWW/webpic.jpg
Leaving a variable unquoted in list context (in shells other than
zsh) is the split+glob operator, you almost never want to do that.
-- marks the end of the options so
"$fn" will not be taken as an option if it starts with
That still fails if filenames contain newline characters, but not space, tab, star, question mark, right square bracket, or start with dash.
Best is to use
#! /bin/zsh -
mv -f /home/pi/JPGS/*.jpg(.om) /home/pi/WWW/webpic.jpg
(.om) are globbing qualifiers, they are a
zsh specific feature.
. restricts the glob to regular files (will not include symlinks, directories, devices...),
om is to order on modification time, and
 to only take the first file.
Note that if you want to assign that to a shell variable, that would have to be an array variable:
(not that it makes a lot of difference on how you use it later).