I've made a twin size granny square blanket for each of my kids, and I'm currently finishing the blanket for my third son. This time, I did the border a little differently than I have in the past.
Practical Crocheter once wrote a post about granny squares. As motifs, these squares are interesting because they have too many increases per round to lie flat as squares. That means that, beyond a certain number of rounds, granny squares torque and then ruffle. The ruffling effect is mitigated when we make lots of squares and join them together, but it is not entirely negated. And that is why granny square blankets often do not lie flat and don't fold neatly.
The seams that join granny squares also create stress points in the fabric. The chain-3 loops at the corners are fairly weak, relative to the rest of the fabric, and these corners are where seams are most likely to come undone, in part because those loops move around and pull on the joins more than other places do. Around the perimeter of the blanket, the pulling of these chain-3 loops also pulls on the stitches in the border, since the border stitches straddle the seam.
Since I am finishing a granny square afghan now, I decided to experiment and see if I could do something about both issues. Normally, when working my way around an afghan, I would handle two joined chain-3 loops by putting two stitches in each chain-3 loop, but none in the seam itself. This time, I put one stitch in each loop and a decrease (in this case a dc2tog decrease) over the seam, with one half of the decrease on one side of it and the other half in the other side.
Since this blanket hasn't been used yet, I don't have any evidence that my experiment will reinforce the stress points around the perimeter. I suspect it will, since there is now a stitch directly over each join, and that stitch is more substantial than a normal double crochet.
As for the other issue, this afghan lies flat. It is not perfectly rectangular, but it does not ruffle at all when I spread it out on the floor.