Resampling pre - post data by shuffling pre/post Is the following approach a valid way to use resampling to determine if observed changes in pre/post test are significant: 
The null hypothesis is that there is no difference between the pre and post values. 
In one case I have a set of 16 observations with an average difference between pre and post values of 1.8. Data shown in the 'data set 1' tab in this workbook
I used the observations to create 10,000 resamples in which I kept all 16 paired observations together but randomly shuffled flip some of the pre and post values. I then calculated the average difference between pre and post for each of these shuffled flipped or not flipped observations. This gave me 10,000 estimates of the average difference between pre and post assuming there is no difference between the two. 
The 10,000 averages are shown in the 'd1 random' tab in the same workbook.
The average difference in these 10,000 resamples is close to 0 (-0.002).
A histogram of these average values looks like this: 

Since the 1.8 value from the actual data is way off to the right of the histogram, I conclude that there is a significant difference between the pre and post values for that test. 
The other two tabs in the workbook ('data set 2' and 'd2 random) show another set of samples that the same approach suggests no difference between the pre and post values. 
Edited Changed word sample to observation and replaced the word shuffled with the word flipped to make it clear that I was keeping the paired samples together. 
 A: As indicated by @Analyst1, you should keep the paired pre and post observations together, so you need to permute the order within pairs. This is equivalent to permuting the sign of the differences. Since there are $n=16$ of these differences, there are $2^{16} = 65536$ ways of permuting the signs. Since this a small enough number, one can go through all of these possible permutations and do an exact permutation test.
Here is R code to accomplish this:
### read in data
dat <- read.table(header=TRUE, text = "
x1 x2
2  5
2  5
3  4
3  4
1  5
2  3
3  5
2  4
2  4
3  4
2  4
3  4
2  4
3  5
3  5
3  4
")

### compute the differences
diff <- dat$x2 - dat$x1

### matrix with all possible sign permutations
signmat <- as.matrix(expand.grid(replicate(nrow(dat), list(c(1,-1))), KEEP.OUT.ATTRS=FALSE))

### loop through all possible sign permutations, flip the signs of the
### differences, compute the mean difference, and store the result in mdiff
mdiff <- rep(NA, nrow(signmat))
for (i in 1:nrow(signmat)) {
   mdiff[i] <- mean(signmat[i,] * diff)
}

This should only take a few seconds to complete. Let's look at the histogram of the permutation distribution and draw in the observed mean difference:
hist(mdiff, breaks=100, col='lightgray')
abline(v=mean(diff), lwd=3)


In this particular case, this is a lot of work for something we could have known a priori. Since all of the observed differences have a positive sign, the observed mean difference is the most extreme one you can observe with these data under the permutation distribution:
> mean(mdiff >= mean(diff))
[1] 1.525879e-05
> 1/nrow(signmat)
[1] 1.525879e-05

So, the exact p-value based on the permutation test is $1/65536$ when testing one-sided and $2/65536$ when testing two-sided.
