You might be to do this by implementing CustomPaymentOptionInfoProvider and overriding the GetPaymentOptions(int siteId, bool onlyEnabled) method. You would first customize the PaymentOption class by adding a field to indicate if the payment should be allowed for authenticated users or not. Then in the custom GetPaymentOptions method you would check if the current user is authenticated.
The code would look similar to this (note the custom field is named AllowPublic):
protected override ObjectQuery<PaymentOptionInfo> GetPaymentOptionsInternal(int siteId, bool onlyEnabled)
{
var query = base.GetPaymentOptionsInternal(siteId, onlyEnabled);
if (MembershipContext.AuthenticatedUser == null)
{
query.WhereEquals("AllowPublic", true);
}
else
{
query.WhereEquals("AllowPublic", false);
}
}
Note: this may have an adverse affect in other areas of Kentico and you should check. A key is that a store admin could still choose the credit payment option for a non-authenticated customer.