CyDelay() uses up all the CPU time during the delay. So the chip is not responsive and will not answer to BLE requests during that time. This will cause the disconnection.
Ways out are:
Start a timer wich, when expired (interrupt), toggles the LED
Use a PWM to make the LED blink
Like user_1377889 said, the CyDelay doesn't allow code to run while it is "delaying".
Using a timer to interrupt and toggle the LED, using the PWM (like you had before), or setting up a WDT to interrupt and toggle the LED on the WDT interrupt.
You could try to use CyDelay for small ms counts of say 1-5 ms, and then keep count of how many delays have passed before toggling the LED, but I would highly advise against that, as the cydelay would be delayed itself by other code running and BLE processing, leading to very wildly varying timing. (But hey, if you can't get things working, getting it working a little bit is better than nothing)