1. If you consider flash channels : double-spend is not possible because when creating a flash channel all participants MUST transfer the exact same amount of iota to a multi-sig wallet (signed by all participants). The amount of iota "in" the flash channel cannot be double-spend because transaction initiating the flash channel (and so the multi-sig address) must be approved before starting the flash channel.
2. If you consider "offline" tangle (aka side-chain) with malicious actors (i.e. a tangle managed by one or more fullnode totally disconnected from the main tangle) : in this case kind-of double-spend is temporary possible. One can indeed double-spend by issuing 2 malicious transactions: one on the main tangle and one on the "offline" tangle. Both transactions can be seen as valid in their respective tangle (except if the coordinator is still running). Double spend will eventually be detected when offline tangle is re-connected with main tangle. It means that transactions that where considered as confirmed in the offline tangle will loose this status when they "re-connect" to the main tangle (simply because there will be no tips from the main tangle approving them)
3. If you consider "offline" tangle (aka side-chain) with only good actors, then, at re-connection, all transactions from the offline tangle can be accepted on the main tangle (because we make the assumption that there is no double spend). It's possible that we need to fix a small technical problem to ensure that new transactions on the main tangle will select tips from the ex-offline-tangle (but I don't know enough about the current tip selection algorithm to go into more details here).
Note that scenario 2 and 3 don't make sense when coordinator is in place and consensus driven by the rule : "milestone transaction must approve a transaction before considering it as 'confirmed' "