>> is there any recommended way to force-copy a value-type variable in Swift ?
A value is always logically copied by assignment to a new variable. That's what a value type means, and it's as true of arrays as it is of Int values.
However, mutation of a value is not automatically thread-safe, and in general is extremely thread-unsafe. In consequence, copying a value by assigning it (or an equivalent operation, such as passing it as a parameter or returning it as a function's return value) at the same time as mutating the value is dangerous in the extreme. This is as true of Ints as it is of arrays.
The fact that Swift arrays happen to be implemented with an underlying copy-on-write referencing mechanism is completely irrelevant to how you reason about this situation. Thus, for example:
>> should I always copy the private array variable before returning it from the public getter?
there's no point in "manually" copying an array in order to return it as a function value. The return is itself a copy, and it's just as safe (or unsafe) as the manual copy you're considering doing instead.
AFAICT, the discussion in your swift.org thread doesn't contradict this, except by acknowledging a bug in the Swift compiler. In a scenario where your code has apparently ensured that mutation and your copying can't happen at the same time, the bug causes the mutation to trigger a different copy at the same time.
In general, and pretending that the bug is no longer an issue, you should be able to treat arrays in the same way you treat Ints: as long as you do not mutate the value while you are copying it, you don't have to worry about the underlying implementation.